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

如题所述

是等价的。
*是取值运算符,++是后置自加运算符。
++的结合性要比*强,所以无论是*p++,还是*(p++)
都是p与++结合。即先去p上的值,再将指针p自加。
要让++与*p结合,需要使用
(*p)++
这样是先取*p的值,然后把*p自加。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-03-15
是等价的。原因是:*与++符号的优先级别相同,此时分析*p++,按结合性,该表达式被编译器自动组合为*(p++)。
第2个回答  2011-03-15
*优先级比++高
所以前者是返回 p指针的值加上1
后者是 先将p指向的地址加上1得到新内存地址,然后返回新内存地址指向的值追问

书上说是等价的 我查了一下*的优先级和++是一样的

追答

哦不好意思,没注意到那是后加符号。。。
由于是后加,所以是先返回p最后再自加,意思就是说不管什么顺序,*这个符号的对象都是p,而不是地址加1的p,这样就等价了,
非常抱歉

第3个回答  2011-03-15
结果是等价的
*和++的运算级是一样的,但是他们都是单目运算符,是从右向左运算的!
在这里
*p++是先进行p++,此时是先取p的值,所以*p它取的还是p的值
*(p++)也是先取p的值,所以*p它取的还是p的值
因此二者是一样的追问

*(p++)有个括号为什么是取p的只而不是p++的值

追答

因为它没有作为一个单独的++运算,而是在一个表达式中,因此它的值的改变是在下一次使用这个变量时,所以它加一个括号与不加无区别

本回答被提问者采纳
第4个回答  2011-03-15
等价
因为++的优先级高
所以两个是等价的

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