C语言中 *(p++) p++ *p++ ++*p (*p)++ 分别是什么意思

 我来答
匿名用户
2019-03-25
展开全部

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

p++         :  指针+1                                                      

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

++*p        : 指针所指地址中的数据+1                            

(*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)是变量

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

百度网友9f8ba65
推荐于2018-03-07 · TA获得超过1018个赞
知道小有建树答主
回答量:384
采纳率:86%
帮助的人:94.7万
展开全部
*p++ 先取指针p指向的值(数组第一个元素1),再将指针p自增1;
(*p)++ 先去指针p指向的值(数组第一个元素1),再将该值自增1(数组第一个元素变为2
*++p 先将指针p自增1(此时指向数组第二个元素),* 操作再取出该值
++*p 先取指针p指向的值(数组第一个元素1),再将该值自增1(数组第一个元素变为2)
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
GANWEIHUN
2012-02-28 · TA获得超过241个赞
知道小有建树答主
回答量:128
采纳率:100%
帮助的人:140万
展开全部
#include<stdio.h>

int main()
{
int a[2]={1,2},*p=a;

// printf("%d\n",*p++); //等于1
//printf("%d\n",*++p); //等于2
// printf("%d\n",(*p)++); //等于1
//printf("%d\n",++(*p)); //等于2
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
qpsd
2012-02-29 · TA获得超过499个赞
知道小有建树答主
回答量:223
采纳率:0%
帮助的人:197万
展开全部
一般能少这样用指针就不要用这种奇怪的表达方式,除非是考试。
指针说穿了,就是一个存着内容地址的数据。
比如,声明一个*p,不管*p是什么类型,p自身的数据只可能是2byte或者4byte的数据,如0x2000,这个值,实际上是p指向的数据的地址;
而*p是p指向的内容的数据,取决于声明时的类型,长度由类型决定,比如char *p;byte *p;long *p;而内容就是char型的值,比如0xFA;
因此你就可以看出上面的问题的答案了。
*(p++),是地址p先++,然后,再取出该地址的值。
p++,直接就是地址加1。
*p++,*比++的优先级高,所以,是*p指向的内容被++了。
++*p,同理,与*p++结果一样。
(*p)++,这个与*p++结果一样。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ycsxm
2012-02-28 · TA获得超过3.3万个赞
知道大有可为答主
回答量:1.4万
采纳率:0%
帮助的人:7955万
展开全部
这样学习C++累不
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式