请问下在C语言中int (*p)[4]与int **p到底有什么区别,我始终不太懂

 我来答
鷹弈
2011-02-07 · TA获得超过5194个赞
知道大有可为答主
回答量:1257
采纳率:0%
帮助的人:618万
展开全部
楼上的回答是在不敢苟同

*p[4]、(*p)[4]、**p的区别(由于里面牵扯一些东西比较深,我简单的讲讲吧)

*p[4]是指针数组,他是数组。数组里面放的是指针,简单的说定义了4个指针,分别是*p[0] *p[1] *p[2] *p[3],相当于将这四个指针打包到这个数组中

(*p)[4]是数组指针,他是指针并且是一个指向二维数组的指针。因为以行为单位,又称行指针。
通俗点讲,后面的[4]说明他的每行有4个元素,[0]代表第一列的下标,[1]代表第二列的下标,一次类推。(*p)的意思是指针p指向第一行,*(p+1)即指向第二行,同理一次类推。那么*(p+2)[3]的意思即是指二维数组第二行第四列的元素

**p是二级指针,即指向指针的指针,他也是一个指针,主要区别在于应用的范围不同,行指针作用对象仅仅是二维数组,二级指针的应用范围就广了,比较典型的就是他可以用指针参数传递内存,指针数组和数组指针可没有这样的用法。也可以用他动态申请内存,存储二维数组元素等等

楼主耐心学习吧,只要坚持下去,这些东西都会慢慢理解的
labikkkk
2011-02-07 · TA获得超过383个赞
知道小有建树答主
回答量:201
采纳率:0%
帮助的人:201万
展开全部
int (*p)[4] 这个是指针数组。里面存的是 4个int指针。数组名字叫p 。这里主要注意一下下优先级
()[]的优先级相同。结合方向是从左到右。所以先跟() 结合。int *p[4] 如果是这样就是 数组指针了。
int **p 是个二维指针。其实很好理解,打个比方。比如你的数据存在地址 2000 号中。你要从从2003号内存里找2000号内存。二维指针就是这样的。从2003 存的地址找到2002 再从2002存的地址找到2000。就是多了个弯而已。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
晋尔容qb
2011-02-07 · 超过10用户采纳过TA的回答
知道答主
回答量:45
采纳率:0%
帮助的人:33.4万
展开全部
int (*p)[4] 中p是数组指针,指向一个int 的二维数组,第二维长度是4
int **p 中p可以指向任意长度的一个int二维数组,第二维长度不一定要是4
int *p[4] 是指针数组,p是一个数组,他的成员是int指针。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
剑圣来自火星
2011-02-07 · 超过27用户采纳过TA的回答
知道答主
回答量:80
采纳率:0%
帮助的人:55万
展开全部
int (*p)[4] 是指向一个p[4] 的数组
int **p 等价于int *p[4]
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式