在c语言中*(p+2)和*p+2有什么不同

 我来答
大野瘦子
高粉答主

2019-07-10 · 繁杂信息太多,你要学会辨别
知道小有建树答主
回答量:1227
采纳率:100%
帮助的人:34.6万
展开全部

一、意思不同

*(p+2) 表示先将地址后移两位,再取地址内容。*p+2 表示先取当前地址内容,然后对内容加2。一个是对地址的操作,一个是对内容的操作,完全不同。

二、用法不同

例如:

有数组a:

1 2 3 4 5

*p=&a;

那么:

*(p+2)=3,*p+2=3

*p就等于1.*(p+X)就是将指针移x的位置。

三、用途不同

1、*p[ ]

main函数的参数中有使用到,其中的 char *argv[]的argv就是一个指针数组,用来存储函数调用时传进来可变个数的参数

int main(int argc, char *argv[])

{
something you want to do;    return 0;
}

2、 (*p)[ ]可以作为二维数组的引用




百度网友77cfe96f7
2015-10-22 · TA获得超过337个赞
知道小有建树答主
回答量:239
采纳率:0%
帮助的人:144万
展开全部
(*p)[2]是数组指针,p是一个指针,指向一个数组的指针;
*p[2]是指针数组,p是一个数组,装载指针的数组。

先看‘*’符号、'()'符号和‘[]’的优先级,在C语言中,'()'和‘[]’符号是相等的等级,'*'的等级比他们两个低;而'()'和'[]'的结合方向是自左向右的,就是说先计算'()'内的。

如此,我们先讲(*p)[2],按照结合方向,先结合‘()’内的*p,说明p是一个指针,在结合‘[]’符号,说明该指针指向的是一个数组,所以(*p)[2]是数组指针;
*p[2]中,‘[]’的优先级比‘*’大,所以先结合p[2],p是一个数组,再结合'*',说明p数组里面装载的是指针,所以*p[2]是指针数组。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友5311d79
推荐于2017-11-24 · TA获得超过1.9万个赞
知道大有可为答主
回答量:6356
采纳率:71%
帮助的人:3227万
展开全部
p是一个指针变量,p本身表示一个存储地址,而*p表示取这个地址单元中的内容。
所以,就可以这样理解:
*(p+2) 表示先将地址后移两位,再取地址内容。
*p+2 表示先取当前地址内容,然后对内容加2。
一个是对地址的操作,一个是对内容的操作,完全不同。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
枯藤老树昏鸦wy
2009-08-22 · TA获得超过109个赞
知道答主
回答量:22
采纳率:0%
帮助的人:0
展开全部
1.(*p)[2] 是指向一维数组(含两个元素)的指针变量
举个例子:
如果是int(*p)[2],表示*p有两个元素,它的每个元素为整形,也就是p所指向的对象是有两个整形元素的数组,即p是指向一维数组的指针
2. *p[2]是指针数组,实质是一个数组,里面的两个元素都是指针
[]的优先级比*的优先级高,p先与[]结合,形成数组p[2],有两个元素的数组,再与*结合,表示此数组是指针类型的,每个数组元素相当于一个指针变量
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
大红颜16
2011-05-14
知道答主
回答量:31
采纳率:0%
帮助的人:21.2万
展开全部
详细给你说下,比如你定义一个指向整数指针int *p;int a=2;p=&a;其实这里的*p不叫指针,真正的指针是p,指针只是个地址而已,定义的时候加个星号表示你定义的是个指针而不是别的.但使用的时候加星号就表示解引用操作也就是对指针指向的内容的操作,第一个加了括号里面优先级大所以先算括号里,括号里是p+2,根据我刚才说的p是个指针所以加2表示指针向后移动两位,所以算完仍然是指针,再加上括号外面的解引用就表示了它所指向的值,而第二个先算*p表示p所指向的值2所以再加2就成了4.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式