Dimon Тищенков

Выделение памяти и обращение к элементам C++

Знающие люди подскажите как обращаться к элементу при следующем выделении памяти под двухмерный массив:
1)double **matr = new double *[row]
2)double *matr = new double [row*n]
В первом случае вроде бы так: *(*(matr+i)+j);

Павлик
Павлик

> В первом случае вроде бы так: *(*(matr+i)+j);
Нет, это как раз для второго случая. Тут выделяется непрерывный участок памяти и адрес элемента вычисляется данным простым действием.

Для первого случая выделяется память под указатели на строки и еще нужно в цикле выделить память для каждой строки. А обращаться к такому массиву можно точно также, как к автоматическим или статическим:

for (size_t r = 0; r < row; ++r) matr[r] = new int[col];
...
... matr[r][c] ...

ТД
Татьяна Дюко

1)
выделяется только память под массив указателей на массивы(одномерный, "список строк").
надо ещё под второе измерение память выделить в цикле на каждый указатель(сами "строки") и заполнить первый массив указателями на них
и только тогда
"*(*(matr+i)+j)"
даст этот элемент

разбор конструкции:
"matr" - указатель на массив `указателей на строки`(он же указатель на 0-й элемент массива указателей на строки, те указатель на `указатель на 0-й массив-строку`)
"matr+i" -- указатель на `указатель на i-й массив-строку`
"*(matr+i)" -- указатель на i массив-строку(он же "matr[ i]"). если память под строку не выделена, то указывает в NULL или в мусор
"(*(matr+i))+j "-- указатель на j-й элемент i-го массива-строки(он же "(matr[ i])+j")
"*( (*(matr+i)) +j )" -- j-й элемент i-го массива-строки(он же "matr[ i][ j]")

2)
тут сразу выделяется память единым непрерывным куском в одномерном массиве
и обращаться к элементу надо не двумерно, а одномерно вычисляя его положение
"*(matr+i*n+j)"
или
"matr[ i*n+j]"

Похожие вопросы
C#. Элемент Windows Forms на WPF
ввод/вывод и обращение к элементу строки в ASM
Проблемма с выделением памяти (malloc,realoc). C;Visual Studio 2010
Удаление элементов из одномерного массива. C++
C# номер элемента массива
Очистка памяти и коментарии c#
Обращение к переменной класса А из класса В (C#)
C# Обращение к пикселям монитора
c# обращение к элементу структуры в Листе структур
Изменение стиля элемента при выделении другого элемента