想搞清楚下面两者的区别

rogers008 2003-12-04 09:05:10
int *p[3];

int (*p)[3];
...全文
30 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sonique 2003-12-04
  • 打赏
  • 举报
回复
我是这样理解的(不一定正确,但是比较好记)
int* p[3]定义的是一个有三个元素的数组,数组元素类型为int*,指向数组的指针为p
int (*p)[3]定义的也是三个元素的数组,数组元素类型为int,指向数组的指针为(*p),从而p为一个指向一个行指针(*p)的指针
HongYang 2003-12-04
  • 打赏
  • 举报
回复
int *p[3] 是一个有三个成员的数组,每一个成员都是指向int型变量的指针。
int (*p)[3] 则是一个变量,指向一个有三个int型员素的一级数组
wadefelix 2003-12-04
  • 打赏
  • 举报
回复
[]和*都是从右向左运算
wadefelix 2003-12-04
  • 打赏
  • 举报
回复
*p[3]是一个指针数组,有三个元素,皆为指针
(*p)[3]是一个指针(只是一个),指向一个有三个元素的数组,行指针
wildhorseych 2003-12-04
  • 打赏
  • 举报
回复
前者是一个int型的指针,初始化为一个3个元素的一维数组
后者是一个指向int型包含3个元素数组的指针,实际上p也就是一个二维指针。
leidongfang 2003-12-04
  • 打赏
  • 举报
回复
int *p[3]是指向一个int型有3个元素的数组的指针,即定义的是指针
int (*p)[3]是一个有3个元素的指针数组,数组的每个元素是指向int型的指针
wangcheng22 2003-12-04
  • 打赏
  • 举报
回复
(*p)[3]是一个一维数组,3表示这个数组的元素个数,其元素类型由定义类型决定,sizeof(p)是2;而p[3]是一个指针数组,其元素类型是指针,sizeof(p)是6;
一般来说,(*p)[3]指向一个3列的二维数组,p=a;则p[1]==p+1==a+1;是第二行的行地址;
由此可见,在分析方法上,(*p)[3]与二维数组分析方法是一样的。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧