int (*p) 4;
"p“是指向4个整数数组的指针吗?不然呢??
我该如何为这个指针调用"new“呢?
发布于 2010-08-02 01:12:31
是指向4个整数数组的"p“指针吗?
对,是这样!
如何为这个指针调用"new“?
例如,p = new int[7][4]。
发布于 2010-08-02 05:01:52
实际上,int (*p)[4]是一个指向四个int数组的指针。
你可以动态分配一个“指向四个int数组的指针”类型的对象,如下所示。
int (**ptr)[4] = new (int (*)[4]);注意,没有为任何int分配空间;只有指针本身。
您可以按如下方式分配一个包含4个int的数组:
int *ptr = new int[4];您不能做的(如果没有显式强制转换)是将一个指向动态分配的4 int数组的指针分配给int (*)[4]类型的指针。每当通过new分配数组时,即使使用类型定义函数,新表达式的类型也是指向数组的第一个元素的指针;数组的大小不会保留在new表达式的类型中。
这是因为new[]表达式可以分配数组,其中数组的大小是在运行时选择的,因此将数组大小编码为新表达式的类型并不总是可能的(甚至是可取的)。
正如所建议的,您可以动态分配一个包含4个int的数组。第一个数组的大小从类型信息中丢失,您得到的是指向四个int数组的数组(大小为1)的第一个元素的指针。
int (*p)[4] = new int[1][4];即使它只是一个由1组成的数组(由4个整数组成的数组),您仍然需要使用delete[]来释放p。
delete[] p;发布于 2010-08-02 01:56:33
对于这样的问题,online CDECL evaluator是一个有用的资源:
cdecl
C gibberish ↔ English
int (*p)[4];
declare p as pointer to array 4 of inthttps://stackoverflow.com/questions/3382951
复制相似问题