C++中动态二维数组的声明方式
在C/C++中定义动态数组时我们都很熟悉使用的是 new 关键字,基本语法如下:
typeName *arrayName = new typeName[arraySize];
比如若想通过输入的 n 来创建一个数组大小为 n 的 int 型数组时,可以这样写:
cin >> n;
int *a = new int[n];
通过上面这个语句我们在内存地址中分配了一片 int[n] 大小的内存空间,并将其首地址赋值给了 a ,在这里 a 是 int* 类型的指针变量。
但是当我想创建一个动态的二维数组时,我仍使用下面这个语句:
cin >> row >> col;
int *square = new int[row][col];
编译器会报错并显示 the value of 'col' is not usable in a constant expression
。 这是因为在使用 new 关键字创建动态数组时,若该数组是多维数组,除了第一个维度可以是变量之外其余都必须是常量。
如下面这种语句就可以通过编译:
int *square = new int[row][10];
以上指出了一种错误的声明动态二维数组的语句,正确的声明思路应该是这样,我们先声明一个一维的指针数组,然后让每个数组元素都指向一片动态分配的内存。