Почему я не могу динамично инициализировать 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

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