首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >int (*p)[3]和int *p[3]有什么区别?

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

Stack Overflow用户
提问于 2013-08-13 02:24:07
回答 2查看 16.7K关注 0票数 6

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

我的困惑在于“int (*p)[3]”这是什么意思?它是像"p“一样存储int的3个连续内存的地址还是别的什么?

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

在此之前非常感谢。

代码语言:javascript
运行
复制
@revised

很抱歉提出了重复的问题。我并没有深入研究我的疑虑。但作为一个程序员新手,我仍然心存疑虑。我浏览了Q/A C pointer to array/array of pointers disambiguation的两个页面

int (*p) [4]?

第二个链接部分清除了疑点,因此消除了我的疑点,请参考堆栈和堆来解释上面的问题:例如

代码语言:javascript
运行
复制
int *p[3]; // (1)

取12(3*4字节)字节的堆栈和堆将取决于运行时。现在用于

代码语言:javascript
运行
复制
int (*p1)[3]; //(2)

(2)使用"new“可以作为

代码语言:javascript
运行
复制
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

那该怎么办呢?

请解释一下。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-13 02:25:54

代码语言:javascript
运行
复制
int *p[3];  // type of p is int *[3]

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

代码语言:javascript
运行
复制
int (*p)[3];  // type of p is int (*)[3]

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

票数 16
EN

Stack Overflow用户

发布于 2013-08-13 02:34:47

声明的语法在C中有点繁琐,C++继承了相同的语法。特别是,arrays和函数包装了声明。如果你记住这一点,它可能会对你有所帮助:

代码语言:javascript
运行
复制
int (*p)[3];
     *p      // p is a pointer to 
int (  )[3]  // an array of 3 int

您可以考虑将声明分成两行:

代码语言:javascript
运行
复制
typedef int int3[3];
int3 *p;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18193983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档