int(*p)[3]和int*p [3]之间有什么区别?

zea*_*eal 6 c c++ arrays pointers

我完全理解什么是" int *p[3]"(p是一个3指针的数组,这意味着我们可以通过将内存分配为不同行的大小来拥有3个不同行的任意数量的行).

我的困惑在于" int (*p)[3]"这意味着什么?它是否像"p"存储int或其他内容的3个连续内存的地址?

请澄清以及如何在程序中使用它们来区分它们.

非常感谢提前.

@revised
Run Code Online (Sandbox Code Playgroud)

很抱歉提出重复的问题.我并没有深入探究我的疑问.但我怀疑仍然是新手程序员.我浏览了两个Q/A C指针指向数组/指针数组消歧的页面

和

int(*p)[4]?

第二个链接部分清除了疑问,所以消除我的疑问,请参考堆栈和堆中的上述问题解释:例如

int *p[3]; // (1)
Run Code Online (Sandbox Code Playgroud)

需要12(3*4bytes)个字节的堆栈,而堆将取决于运行时.现在为

int (*p1)[3]; //(2)
Run Code Online (Sandbox Code Playgroud)

(2)使用"new"将其中一个作为

p1 = new int[7][3]; // (3)
Run Code Online (Sandbox Code Playgroud)

给出了链接int(*p)[4]的答案之一?; 现在我的问题是因为"int(*p1)[3]; //(2)"是一个指向3个int数组的指针,因此在编译时p1将占用多少内存,因为eq(3)也可以被替换为

p1 = new int[n][3]; // (3) where n is an integer

那么呢?

请解释.

oua*_*uah 16

int *p[3];  // type of p is int *[3]
Run Code Online (Sandbox Code Playgroud)

声明p为数组3 int *(即三个数组int *)

和

int (*p)[3];  // type of p is int (*)[3]
Run Code Online (Sandbox Code Playgroud)

声明p为指向数组3的int指针(即指向三个数组的指针int)

  • 如果不是"T的数组N"而是"N T数组",我认为措辞不那么尴尬. (5认同)
  • @BenC.:`typedef int ArrayOf3Int [3]; ArrayOf3Int*p;`. (2认同)