C语言中关于优先级、++和*一元操作符的问题

3
我的问题不长,但对我来说很困惑。我是那些(我认为是正确的)希望了解他们学习的语言的每个规则的人之一。我想知道为什么语言会做它所做的事情。
所以,为什么++*i会增加*i的值,而不是i指针?预增量运算符的优先级高于间接运算符。这似乎是一个常识性的问题,但再次强调,我必须确切地知道为什么。如果可以,请提供参考资料。
2个回答

5

它不能被解析为*(++i),对吗?

顺便说一下,*和前缀++具有相同的优先级和从右到左的结合性。


那很有道理。我刚刚验证了我的手册有一个打印错误,它说++比*高。 - Subsentient
后缀 ++(后自增)优先级更高,前缀 ++(前自增)不是。 - nullptr

3

前缀运算符 ++ 的优先级与一元运算符 * 相同,而后缀运算符 ++ 的优先级高于一元运算符 *
++*i 的情况下,编译器会将其解释为

++ (*i);  

这意味着,解引用 i,使用它,增加解引用值而不改变指针的值。

C手册经常声明后缀和前缀操作符具有相同的优先级,但是它们的结合性使得谁是正确的几乎不相关。 - Subsentient

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接