C运算符优先级后缀增量和取消引用
这是 C 新手的另一个幼稚问题:在此页面上,https : //en.cppreference.com/w/c/language/operator_precedence 列出后缀增量的优先级高于指针取消引用的优先级。所以我期望在下面的代码中指针首先递增(指向 10)然后取消引用。
#include <stdio.h>
int main()
{
int a[] = {3, 10, 200};
int *p = a;
printf("%d", *p++);
return 0;
}
但是,此代码仍输出第一个数组项 (3)。这个概念我错过了什么?
回答
优先级是放置括号。
表达式*p++可以用括号括起来
(*p)++ // incorrect precedence
*(p++) // correct precedence
请注意,的值p++是p任何更改之前的值,因此正确优先级的净效果与*p没有蚂蚁反射的副作用 相同++。对p自身的改变不会改变 的结果*(p++)。