考虑这个例子:
struct {
int num;
} s, *ps;
s.num = 0;
ps = &s;
++ps->num;
printf("%d", s.num); /* Prints 1 */
它打印1
。
所以我理解这是因为根据运算符优先级,->
高于++
,所以ps->num
首先获取值(即 0)然后++
运算符对其进行操作,因此将其递增为 1。
struct {
int num;
} s, *ps;
s.num = 0;
ps = &s;
ps++->num;
printf("%d", s.num); /* Prints 0 */
在这个例子中,我得到0
了,但我不明白为什么;第一个例子的解释应该和这个例子一样。但似乎这个表达式的计算方式如下:
首先,运算符++
进行操作,然后对 进行操作ps
,因此将其递增到下一个struct
。只有 then->
操作并且它什么都不做,因为它只是获取num
下一个字段struct
并且什么都不做。
但这与运算符的优先级相矛盾,运算符的->
优先级高于++
.
有人可以解释这种行为吗?
编辑:
在阅读了两个引用 C++ 优先级表的答案后,表明前缀++
/--
运算符的优先级低于->
,我进行了一些谷歌搜索并提出了这个链接,指出该规则也适用于 C 本身。它完全符合并完全解释了这种行为,但我必须补充一点,此链接中的表格与我自己的 K&R ANSI C 副本中的表格相矛盾。因此,如果您对哪个来源是正确的有建议,我想知道。
谢谢。