Почему я не могу динамично инициализировать 2D массивы, как инициализация 1D массивов в C ++?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему я не могу динамично инициализировать 2D массивы, как инициализация 1D массивов в C ++?

Сообщение Anonymous »

Почему я не могу динамично инициализировать 2D массивы, как инициализация 1D массивов? < /p>
Например: < /p>

Код: Выделить всё

class ClassName
{
int* array1d;
int** array2d;

ClassName(int size1, int size2)
{
array1d = new int[size1];        // work.
array2d = new int[size1][size2]; // doesn't work.
}
}
< /code>
Я искал в Интернете, и я нашел этот вопрос, и я обнаружил, что вы можете сделать это только в том случае, если вы указали длину строки как постоянную. Как array2d = new [size1] [5] < /code>. < /P>
Я хочу понять, почему.
Мои предположения заключается в том, что это потому, что компиляторы рассматривают 2D массивы как «массив», в котором «массивы», поэтому им необходимо знать размер типа данных «Внутренний массив». Таким образом, они будут выделять память для нее, в зависимости от длины внешнего массива и размера памяти внутренней длины массива внешнего размера (внутреннего массива) 
, поэтому размер внутреннего массива должен быть постоянным. Мои предположения правда?

Подробнее здесь: https://stackoverflow.com/questions/795 ... rrays-in-c
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»