Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 66, средняя оценка - 4.62
iKapex
3 / 3 / 0
Регистрация: 07.10.2012
Сообщений: 228
#1

Malloc. Двумерные массивы - C++

13.10.2012, 17:16. Просмотров 9357. Ответов 6
Метки нет (Все метки)

Всем привет.
Выделяем динамическую память.


1) int *M=(int*)malloc(sizeof(int)*N*N)

2) int **M=(int **)malloc(N*sizeof(int*)
for (int i=0; i<N; i++)
M[i] = (int*) malloc (N*sizeof(int)


Правила чтения этой вышенаписанной ерунды? Как это читается? и где можно подробно про это почитать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.10.2012, 17:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Malloc. Двумерные массивы (C++):

Двумерные массивы - C++
Никогда особо раньше не занимался программирование,больше как то математикой.И вот на первом курсе стали изучать язык Си на лекциях.На...

с++ двумерные массивы - C++
с++ двумерные массивы, можете помочь написать код пожалуйста №1 Заполнить матрицу А(9,9), от левого верхнего угла по диагонали: вправо -...

Двумерные массивы - C++
Помогите люди добрые:) Дана целочисленная прямоугольная матрица, определить: 1) Кол-во отрицательных эл-тов тех строк, которые содержат...

двумерные массивы - C++
Составить программу обмена местами максимального и минимального элементов главной диогонали матрицы 4x4. зарание спасибо!

Двумерные массивы - C++
Ребята, помогите очень прошу! :с По массиву А(n,m) получить массив В(n) (типа boolean), присвоив k-му элементу значение true, если все...

Двумерные массивы. - C++
для заданной матрицы размером 8x8 найти такие k, что k-я строка матрицы совпадает с k-м столбцом. Как это вообще? Второй день голову...

6
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
13.10.2012, 19:32 #2
1. Выделяем кусок памяти, достаточный для размещения N2 интов. Указатель на его начало сохраняем в M. Это можно понимать как одномерный массив из N2 элементов (доступ по M[i]), так и как двумерный из N × N (доступ по M[N*i + j])

2. Выделяем кусок памяти, достаточный для размещения N указателей. Потом выделяем N кусков памяти, достаточных для размещения по N интов в каждом. Сохраняем их в первом массиве. Указатель на начало массива указателей на массивы сохраняется в M. Эту штуку можно использовать как массив N × N с помощью M[i][j].
1
alexcoder
1468 / 681 / 89
Регистрация: 03.06.2009
Сообщений: 3,617
Завершенные тесты: 1
13.10.2012, 19:32 #3
Если i - строка, j-столбец
В первом случае:
C
1
a=M[i*N+j]
Во втором полностью идентично статическим массивам:
C
1
a=M[i][j]
1
OhMyGodSoLong
13.10.2012, 19:39
  #4

Не по теме:

Цитата Сообщение от alexcoder Посмотреть сообщение
Во втором полностью идентично статическим массивам
Синтаксически идентично. Если смотреть в памяти, то многомерные массивы размещаются в одном сплошном куске и адресуются через кучку сдвигов.

1
MLPMan
Кандёхаем веселее!
286 / 283 / 35
Регистрация: 02.10.2012
Сообщений: 2,000
13.10.2012, 20:53 #5
Мне в C++ удобнее использовать "new", так текст менее навороченый, легче читать.
Например, создание матрицы 10x10, эквивалентно коду 2 :
C++
1
2
3
4
int N, i;
N=10;
int** M = new int*[N]; //Выделяем память для M - массива из 10 массивов
for (i=0; i<N; i++) M[i] = new int[N]; //Выделяем память для каждого "подмассива"
0
iKapex
3 / 3 / 0
Регистрация: 07.10.2012
Сообщений: 228
13.10.2012, 22:09  [ТС] #6
Спасибо за ответы.

Но я даже не понимаю как работает доступ M[N*i+j]. М(как я понимаю имя массива). Допустим, число элементов N=10, нам надо получить значение ячейки М[5][3]. Тогда M[10*5+3] равно 53. Что значит эта цифра?
0
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
14.10.2012, 00:38 #7
Это индекс в большоооом одномерном массиве. На самом деле™ двумерные массивы представляются как одномерные. Первые 10 элементов — это M[0][...], вторые 10 — это M[1][...] и т. д.

Но это касается статически создаваемых. И когда такая адресация делается руками. Если делать malloc, а потом ещё malloc в цикле, то немного не так.
2
14.10.2012, 00:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.10.2012, 00:38
Привет! Вот еще темы с ответами:

Двумерные массивы - C++
Привет всем! если есть у кого время, посмотрите что можно сделать, нужна ваша помощь! Сформировать одномерный массив B из максимальных...

Двумерные массивы. - C++
Помогите решить задачку!!!!!! Дана действительная квадратная матрица порядка 2N. Подучить новую матрицу, переставляя ее блоки размера N х...

Двумерные массивы в С++ - C++
Написать программу, которая дает пользователю ввести 5 фамилий студентов, а затем находит среди них самую длинную фамилию. Все фамилии...

Проги на двумерные массивы - C++
Здравствуйте Все! Если кто может, нужно решить две задачи или хотя бы подсказать принцип действия ,или часть проги.:):):) Задача№1:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru