(*p)++和*(p++)和*p++的区别,为什么?

*(p++)究竟是谁++,是p的地址++,还是p所指的东西的地址++... *(p++)究竟是谁++,是p的地址++,还是p所指的东西的地址++ 展开
 我来答
稀饭twotwoa744
推荐于2017-09-10 · TA获得超过373个赞
知道答主
回答量:13
采纳率:100%
帮助的人:6万
展开全部

前缀递增递减和*优先级相同,从右到左;

后缀递增递减比前缀优先级高,从左到右。

比如

int arr[5] = { 1,3,5,7,9 };
int *p = arr;

*++p:p先自+,然后*p,最终为3

++*p:先*p,即arr[0]=1,然后再++,最终为2

*p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]

(*p)++:先*p,即arr[0]=1,然后1++,该语句执行完毕后arr[0] =2

*(p++):效果等同于*p++

养海瑶PI
推荐于2017-10-08 · TA获得超过412个赞
知道小有建树答主
回答量:162
采纳率:0%
帮助的人:261万
展开全部
(*p)++,是先取指针P的值,然后对其值进行++运算,
*(p++),是先对指针P进行++运算,然后再取取值,
*p++,同*(p++),因为按优先级来看,*和++是同级,他们都是从右到左的顺序进行运算,所以先++,再*。

如果
char q[5] = "am";
char *p = q;
那么,
(*p)++后,p就变成了"bm";因为是进行对其首元素进行加1运算
*(p++)后,p就变成了"m",因为是先指向下一个元素,再进行取值运算,
*p++同上面,
如果只是征对这3个语句赋值给其他变量的话,3个的结果都是a,在这里。
char o = (*p)++;
char m = *(p++);
char n = *p++;
都是a。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2019-03-25
展开全部

*(p++):取出指针p所指地址中的数据,指针+1                                                      

*p++        :  等同于 *(p++)                                                              

(*p)++  : 取出指针p所指地址中的数据,地址中的数据+1                      

********************************************************

tip1.  * 与 ++的优先级相同的,它们的结合性都是自右向左

tip2.  ()的优先级高于*和++

****************************************************************

优先级、结合性分析:     

*p++      由(tip1)可知,p先与++结合,再与*结合,

*(p++)     由(tip2)可知,p先与++结合,再与*结合

得出结论:*p++等同于 *(p++)

**********************************************************

变量分析:

*(p++)      由(tip2)可知,是p先与++结合,变量是  p, 

得出结论:*(p++)      // 是指针所指的地址值在变化            (不同点)

(*p)++       由(tip2)可知,p先与*结合,得到*p

是*p与++结合,变量是  *p

得出结论:(*p)++    //是指针所指地址中的数据值在变化   (不同点)

******************************************************************** 

小结:    

因为(tip1、tip2)可得出:   

1.指针所指地址自增

*p++等同于*(p++)

*++p等同于*(++p)

2.指针所指地址中数据自增

++(*p)等同于++*p

(*p)++

*********************************************************

作为输出项时

(左自增:先求变量变化,再输出)   

形式:++p、*++p、++*p、++(*p)、

(右自增:先输出变量当前所指值,再求变量的变化)

形式:p++、*p++、(*p)++、*(p++)

哪个是变量:(在tip1、tip2的基础上)与 ++  结合的整体是变量

++p        :  p   是变量、 

++(*p):    (*p)是变量

***********************************************************

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wmcchen
2011-09-17 · TA获得超过495个赞
知道小有建树答主
回答量:64
采纳率:100%
帮助的人:58.3万
展开全部
楼主可以去看看c语言优先级有关的知识。首先*p++等价于*(p++)。至于为什么会等价呢?根据c语言的优先级。*与++的优先级同处在第二级别上。他们的优先级是一样的,又因为处在第二级别的优先级运算符是结合方向是从右到左,所以当出现*p++这样的表达式的时候,根据优先级别相同,并且结合方向是从右到左,所以就等价于*(p++)了。那么也就是,先将p指针移动到下个p指针所指向元素的地址的下一个地址,然后再对那个地址取值。(*p)++是取p所指向地址的值,然后再将这个值+1.这里举个例子,比如
int a[2]={1,10};
int *p=a;
*p++//的结果就是等于数组的第二个元素10.
(*p)++//的结果就是1+1=2.
楼主,我这样解释,把意思讲明白了么?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
free_ing
2011-02-17 · TA获得超过138个赞
知道小有建树答主
回答量:94
采纳率:0%
帮助的人:131万
展开全部
()的优先级高,所以()里面的先执行。另外++的优先级高于*。
(*p)++中,是p所指的东西++
*(p++)中,是p的地址++。*p++与*(p++)一样的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(9)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式