C语言中 *p++和 *(p++)是等价的吗 为什么
6个回答
展开全部
是等价的。原因是:*与++符号的优先级别相同,此时分析*p++,按结合性,该表达式被编译器自动组合为*(p++)。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
*优先级比++高
所以前者是返回 p指针的值加上1
后者是 先将p指向的地址加上1得到新内存地址,然后返回新内存地址指向的值
所以前者是返回 p指针的值加上1
后者是 先将p指向的地址加上1得到新内存地址,然后返回新内存地址指向的值
追问
书上说是等价的 我查了一下*的优先级和++是一样的
追答
哦不好意思,没注意到那是后加符号。。。
由于是后加,所以是先返回p最后再自加,意思就是说不管什么顺序,*这个符号的对象都是p,而不是地址加1的p,这样就等价了,
非常抱歉
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
结果是等价的
*和++的运算级是一样的,但是他们都是单目运算符,是从右向左运算的!
在这里
*p++是先进行p++,此时是先取p的值,所以*p它取的还是p的值
*(p++)也是先取p的值,所以*p它取的还是p的值
因此二者是一样的
*和++的运算级是一样的,但是他们都是单目运算符,是从右向左运算的!
在这里
*p++是先进行p++,此时是先取p的值,所以*p它取的还是p的值
*(p++)也是先取p的值,所以*p它取的还是p的值
因此二者是一样的
追问
*(p++)有个括号为什么是取p的只而不是p++的值
追答
因为它没有作为一个单独的++运算,而是在一个表达式中,因此它的值的改变是在下一次使用这个变量时,所以它加一个括号与不加无区别
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
等价
因为++的优先级高
所以两个是等价的
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
因为++的优先级高
所以两个是等价的
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询