C语言中 *p++和 *(p++)是等价的吗 为什么

 我来答
风若远去何人留
2015-12-30 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450106
专业C/C++软件开发

向TA提问 私信TA
展开全部
是等价的。
*是取值运算符,++是后置自加运算符。
++的结合性要比*强,所以无论是*p++,还是*(p++)
都是p与++结合。即先去p上的值,再将指针p自加。
要让++与*p结合,需要使用
(*p)++
这样是先取*p的值,然后把*p自加。
pu_hb
2011-03-15
知道答主
回答量:31
采纳率:0%
帮助的人:14.6万
展开全部
是等价的。原因是:*与++符号的优先级别相同,此时分析*p++,按结合性,该表达式被编译器自动组合为*(p++)。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
waitingforlll
2011-03-15
知道答主
回答量:15
采纳率:0%
帮助的人:12.3万
展开全部
*优先级比++高
所以前者是返回 p指针的值加上1
后者是 先将p指向的地址加上1得到新内存地址,然后返回新内存地址指向的值
追问
书上说是等价的 我查了一下*的优先级和++是一样的
追答
哦不好意思,没注意到那是后加符号。。。
由于是后加,所以是先返回p最后再自加,意思就是说不管什么顺序,*这个符号的对象都是p,而不是地址加1的p,这样就等价了,
非常抱歉
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zheng_zhiwen12
2011-03-15 · TA获得超过543个赞
知道小有建树答主
回答量:265
采纳率:100%
帮助的人:101万
展开全部
结果是等价的
*和++的运算级是一样的,但是他们都是单目运算符,是从右向左运算的!
在这里
*p++是先进行p++,此时是先取p的值,所以*p它取的还是p的值
*(p++)也是先取p的值,所以*p它取的还是p的值
因此二者是一样的
追问
*(p++)有个括号为什么是取p的只而不是p++的值
追答
因为它没有作为一个单独的++运算,而是在一个表达式中,因此它的值的改变是在下一次使用这个变量时,所以它加一个括号与不加无区别
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
不爱到爱
2011-03-15 · TA获得超过296个赞
知道小有建树答主
回答量:278
采纳率:0%
帮助的人:310万
展开全部
等价
因为++的优先级高
所以两个是等价的

c语言的操作符共有15个优先级,如下: Operators Associativity ------------------------------------------------------------------ 运算符 结合性 ------------------------------------------------------------------ () [] -> . left to right
! ~ ++ -- + - * (type) sizeof right to left
* / % left to right
+ - left to right
<< >> left to right
< <= > >= left to right
== != left to right
& left to right
^ left to right
| left to right
&& left to right
|| left to right
?: right to left
= += -= *= /= %= &= ^= |= <<= >>= right to left
, left to right
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式