++*p
、*p++
和*++p
的区别
预测以下C程序的输出。
只要记住关于后缀++、前缀++和*
(dereference)操作符的简单规则,上述程序和所有这类程序的输出都很容易猜到
1)前缀++和*
的优先级相同。两者的结合律是从右到左。
2)后缀++的优先级高于*
和前缀++。后缀++的结合性是从左到右。
表达式++*p
有两个优先级相同的操作符,因此编译器寻找结合性。运算符的结合律是从右到左。因此,表达式被处理为 ++(*p)
。因此,第一个程序的输出是 Arr [0] = 11, Arr [1] = 20, *p = 11
.
表达式*p++
被视为 *(p++)
因为后缀++的优先级比*
高。因此第二个程序的输出为Arr [0] = 10, Arr [1] = 20, *p = 20
.
表达式*++p
有两个优先级相同的操作符,因此编译器寻找结合性。运算符的结合律是从右到左。因此,表达式被处理为 *(++p)
. 因此第三个程序的输出是Arr [0] = 10, Arr [1] = 20, *p = 20
.