"p"指针指向4个整数的数组吗?
正确!
如何为此指针调用"new"?
例如,p = new int[7][4].
int (*p)[4]确实是指向四个数组的指针int.
您可以动态分配"指向四个数组的指针"类型的对象,int如下所示.
int (**ptr)[4] = new (int (*)[4]);
Run Code Online (Sandbox Code Playgroud)
注意,没有int分配任何空间; 只有指针本身.
您可以按如下方式分配4个整数的数组:
int *ptr = new int[4];
Run Code Online (Sandbox Code Playgroud)
您不能做的事情(没有显式转换)是将指向动态分配的数组4 int的指针分配给类型的指针int (*)[4].无论何时通过new,即使使用typedef 分配数组,新表达式的类型也是指向数组的第一个元素的指针.数组的大小不保留在new表达式的类型中.
这是因为new[]表达式可以分配数组,其中在运行时选择数组的大小,因此并不总是可能(或者甚至是可取的)将数组大小编码为新表达式的类型.
如上所述,您可以动态分配一个4的数组的数组int.第一个数组的大小从类型信息中丢失,你得到的是指向四个数组的数组(大小为1)的第一个元素的指针int.
int (*p)[4] = new int[1][4];
Run Code Online (Sandbox Code Playgroud)
即使它是一个只有1的数组(4 int的数组),你仍然需要使用delete[]deleocate p.
delete[] p;
Run Code Online (Sandbox Code Playgroud)