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