int(*p)[4]?

Far*_*ine 9 c++

int(*p)[4];

"p"指针指向4个整数的数组吗?或者是什么 ??

如何为此指针调用"new"?

fre*_*low 7

"p"指针指向4个整数的数组吗?

正确!

如何为此指针调用"new"?

例如,p = new int[7][4].

  • 在编辑之前,Err ..是+1.new int [7] [4]给你一个28英寸宽的单块. (3认同)
  • @Billy:我的例子没有错.`new int [7] [4]`*的类型是*`int(*)[4]`.也许使用typedef会更明显?`typedef int row [4]; row*p = new row [7];`这与我的代码完全相同,只是更具可读性.你会认为这也是错的吗? (3认同)
  • @Billy:欢迎来到C声明符语法地狱;-)我能找到的最佳参考是5.3.4(§5和§6). (3认同)

CB *_*ley 6

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)

  • 当然,实际上永远不应该是一个需要手动调用`delete`的位置. (2认同)
  • @Farah_online:数组的大小无关紧要,你总是用`delete [] p删除数组;`所以`p = new int [1] [4];```delete [] p`和`p = new int [4] [4];`...`delete [] p`.在数组成员上调用delete(`delete [] p [i]`或`delete p [i]`)无效. (2认同)