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++)


以上是C运算符优先级后缀增量和取消引用的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>