我完全理解什么是"int *p[3]
“(p是一个由3个指针组成的数组,这意味着通过分配内存作为不同行的大小,我们可以有3个不同行的任意数量的int)。
我的困惑在于“int (*p)[3]
”这是什么意思?它是像"p“一样存储int的3个连续内存的地址还是别的什么?
请澄清,以及如何在程序中使用来区分它们。
在此之前非常感谢。
@revised
很抱歉提出了重复的问题。我并没有深入研究我的疑虑。但作为一个程序员新手,我仍然心存疑虑。我浏览了Q/A C pointer to array/array of pointers disambiguation的两个页面
和
第二个链接部分清除了疑点,因此消除了我的疑点,请参考堆栈和堆来解释上面的问题:例如
int *p[3]; // (1)
取12(3*4字节)字节的堆栈和堆将取决于运行时。现在用于
int (*p1)[3]; //(2)
(2)使用"new“可以作为
p1 = new int[7][3]; // (3)
现在我的问题是,因为“int (*p) [4]? (* p1 )3;//(2)”是指向3个int数组的指针,所以p1在编译时会占用多少内存,因为eq(3) a也可以替换为
p1 = new int[n][3]; // (3) where n is an integer
那该怎么办呢?
请解释一下。
发布于 2013-08-13 02:25:54
int *p[3]; // type of p is int *[3]
将p
声明为int *
的数组3(即三个int *
的数组)
和
int (*p)[3]; // type of p is int (*)[3]
将p
声明为指向int
的数组3的指针(即指向包含三个int
的数组的指针)
发布于 2013-08-13 02:34:47
声明的语法在C中有点繁琐,C++继承了相同的语法。特别是,arrays
和函数包装了声明。如果你记住这一点,它可能会对你有所帮助:
int (*p)[3];
*p // p is a pointer to
int ( )[3] // an array of 3 int
您可以考虑将声明分成两行:
typedef int int3[3];
int3 *p;
https://stackoverflow.com/questions/18193983
复制相似问题