C语言中int *p[5]与 int (*p)[5]的区别

 我来答
帐号已注销
2021-01-12 · TA获得超过77万个赞
知道小有建树答主
回答量:4168
采纳率:93%
帮助的人:156万
展开全部

一、作用不同:

优先级的问题,[]的优先级高于*,这就是为什么后者加了一个(),int *p[5]定义一个指针数组p,讲到底这个p是一个数组,数组内的元素是5个指针,而数组内的每一个指针指向一个int型的变量;int (*p)[5]定义了一个指向5个元素的一维数组的指针。

二、含义不同:

第二个就是这个指针所指的值是一个大小为5个int的数组的首地址。p+1(数组地址+1)代表内存地址下移了5个单位。

三、使用不同:

int (*p)[5];

int a[10][5];

p=&a[1]; // 现在(*p)就等于a[1] 所以 a[1][2]可以表示为(*p)[2]

扩展资料:

二维数组A[m][n],这是一个m行,n列的二维数组。设a[p][q]为A的第一个元素,即二维数组的行下标从p到m+p,列下标从q到n+q,按“行优先顺序”存储时则元素a[i][j]的地址计算为:

LOC(a[i][j]) = LOC(a[p][q]) + ((i − p) * n + (j − q)) * t

按“列优先顺序”存储时,地址计算为:

LOC(a[i][j]) = LOC(a[p][q]) + ((j − q) * m + (i − p)) * t

存放该数组至少需要的单元数为(m-p+1) * (n-q+1) * t 个字节 

参考资料来源:百度百科-二维数组

百度网友9e36d1c
推荐于2017-09-15 · TA获得超过409个赞
知道小有建树答主
回答量:169
采纳率:0%
帮助的人:110万
展开全部
楼上说的是错的,int *p[5],首先它是一个数组,它的大小是5,它里面存放的数据类型是int *,也就是整型指针。 所以它叫指针数组、 (从右向左解析这个表示)
int (*p)[5],首先p是一个指针,指向大小为5的数组,因此这叫数组指针。(括号优先)

这个在《C专家编程》里面说的很清楚。你可以看一下。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我就是托育研究员
2011-08-07 · TA获得超过171个赞
知道答主
回答量:115
采纳率:0%
帮助的人:53.9万
展开全部
其实我们先讨论一个优先级的问题,[]的优先级高于*,这就是为什么后者加了一个(),int *p[5]定义一个指针数组p,讲到底这个p是一个数组,数组内的元素是5个指针,而数组内的每一个指针指向一个int型的变量;int (*p)[5]定义了一个指向5个元素的一维数组的指针。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
playboy8165
2011-08-07 · TA获得超过196个赞
知道小有建树答主
回答量:354
采纳率:0%
帮助的人:136万
展开全部
第二个就是这个指针所指的值是一个大小为5个int的数组的首地址。换句话说,p+1(数组地址+1)代表内存地址下移了5个单位。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
胜凭秋o
2011-08-07 · TA获得超过165个赞
知道小有建树答主
回答量:288
采纳率:0%
帮助的人:142万
展开全部
int *p[5]那么p[0]是一个int指针
int (*p)[5] 那么p是一个指向数组的指针
追问
还是不懂。第一个我懂。第2个不懂。
追答
int a[5]
这里a的类型为 大小为5的数组

而int (*p)[5] 就是一个指向上边数组的指针
就是说*p就是a
就是说(*p)[0] 就是a[0]
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式