我完全理解什么是“ int *p[3]
”(p 是一个由 3 个指针组成的数组,这意味着我们可以通过将内存分配为不同行的大小来拥有 3 个任意数量的 int 的不同行)。
我的困惑在于“ int (*p)[3]
”这是什么意思?是像“p”存储3个int的连续内存的地址还是别的什么?
请澄清以及如何在程序中使用 use 来区分它们。
提前非常感谢。
@revised
很抱歉提出重复的问题。我没有仔细研究我的疑问。但我的疑问仍然是作为新手程序员。我浏览了 Q/A C 指针到数组/指针数组消歧的两个页面
和
第二个链接部分消除了疑问,因此消除了我的疑问,请参考堆栈和堆解释上述问题:例如
int *p[3]; // (1)
占用 12(3*4bytes) 字节的堆栈和堆将取决于运行时。现在为
int (*p1)[3]; //(2)
(2)使用“新”将是一个
p1 = new int[7][3]; // (3)
在链接int (*p) [4]的答案之一中给出?; 现在我的问题是因为“int (*p1)[3]; //(2)”是一个指向 3 个整数数组的指针,所以 p1 在编译时将占用多少内存,因为 eq(3) 也可以被替换为
p1 = new int[n][3]; // (3) where n is an integer
那怎么办?
请解释。