c语言中*p++和(*p)++有什么区别?

 我来答
华银泰傲旋
2019-09-29 · TA获得超过3789个赞
知道大有可为答主
回答量:3010
采纳率:27%
帮助的人:428万
展开全部
后自增操作符总是先把原值赋值给表达式,然后完成自增操作的
所以printf("%d\n",*p++);相当于printf("%d\n",*p);p++;
而printf("%d\n",(*q)++);相当于printf("%d\n",*q);(*q)++
所以答案应该是3,3,4
卷今夏侯含巧
2019-12-13 · TA获得超过3679个赞
知道大有可为答主
回答量:3040
采纳率:34%
帮助的人:202万
展开全部
*p++
//它相当于*(p++),首先指针p后移,由于对指针是后缀加,所以p++返回p没后移时的指针,如果是数组,那么表达式的值为指针当前所指元素(指针没有后移时)的值
*++p
//相当于*(++p),指针p先后移,如果是数组,则指向下一个元素,然后++p返回指针下移后的指针。然后*取下移指针后所指向的值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
次童周飞兰
2019-01-30 · TA获得超过3810个赞
知道大有可为答主
回答量:3124
采纳率:25%
帮助的人:199万
展开全部
我看书中解释:*p++:是先取出*p的值,再使p加1
//p是个指针,给p加1,相当于让p指向了x所在地址的下一个位置,而对于x则是没有任何影响
(*p)++:是使*p的值加1.
//*p则是p指向的位置对应的值,题目中是*q,所以此时的*q就是x的值,为3,当输出*q之后,再给*q即x自加1,所以x就变为4
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
萧紫完颜幼白
2019-06-26 · TA获得超过3964个赞
知道大有可为答主
回答量:3160
采纳率:34%
帮助的人:225万
展开全部
*p++是指下一个地址。
(*p)++是指将*p所指的数据的值加一。
C编译器认为*和++是同优先级操作符,且都是从右至左结合的,所以*p++中的++只作用在p上,和*(p++)意思一样;在(*p)++中,由于()的优先级比*和++都高,所以++作用在()内的表达式*p上。比如有:
int
x,y,a[]={1,2,3,4,5},*p=a,*q=a;
x=*p++;//执行这一句后x=a[0]=1,p=a+1
y=(*q)++;//执行这一句后,y=a[0]+1=2,q仍然=a
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式