a是指向结构的指针,b是结构
a++ -> b
上述代码的评估顺序为
((a++) -> b)
或
(a -> b) ++
答案 0 :(得分:6)
作为后缀增量和指向成员运算符的指针具有完全相同的优先级,关联性两个运营商发挥作用。两者都是从左到右。
因此
a++ -> b
评估为
(a++) -> b
这意味着->
适用于指针a
的先前值,a
使用正常规则递增 - 在语句完成执行之前的某个时间完成。< / p>
(一个用于酒吧测验,前缀增量的优先级低于->
)。
答案 1 :(得分:3)
根据C标准(6.5.2.3结构和工会成员)
4 后缀表达,后跟 - &gt;运营商和 identifier指定结构或联合对象的成员。该 value是第一个对象的指定成员的值 表达点,并且是左值.96)如果第一个表达式是a 指向限定类型的指针,结果具有如此限定的版本 指定成员的类型。
在此表达式中
a++ -> b
a++
是一个后缀表达式。所以你可以像
( a++ ) -> b
此表达式生成指针b
在其增量之前指向的对象的数据成员a
的值。
这是一个示范程序
#include <stdio.h>
int main( void )
{
struct A
{
int b;
} pair[] = { { 1 }, { 2 } };
struct A *a = pair;
printf("%d\n", a++->b);
printf("%d\n", a++->b);
return 0;
}
程序输出
1
2