假设我有一个结构
struct s
{
int a;
}
以及像这样的主要功能
int main()
{
struct s s1 = {.a = 10};
struct s *sptr = &s1;
sptr->a--;
printf("%d\n", sptr->a);
s1.a = 10;
--sptr->a;
printf("%d\n", sptr->a);
return 0;
}
输出 :
9
9
按照运算符优先级,->
具有--
相同的优先级和左->右结合性。
如果是sptr->a--
,我可以理解sptr->a
是先完成然后再--
应用。
但在 的情况下--sptr->a
,--
应首先应用于sptr
。这可能会导致未定义的行为,但应该是这样。为什么这仍然与 一样有效sptr->a--
?