struct {
int a; int *b;
} s[4], *p;
int i, n = 1;
for(i = 0; i < 4; i++){
s[i].a = n;
s[i].b = &s[i].a;
n = n + 2;
}
p = &s[0];
printf("%d\n", ++*p->b);
p++;
printf("%d,%d\n", (++p)->a, (p++)->a);
输出结果为什么不是2,5,3
在dev上运行好像是2,7,3
数组中四个a分别为1,3,5,7,b分别指向对应a的地址
p指向数组首地址
++ * p->b,由于->优先级高,因此这里是对数组第0个元素的b指针指向的值加1,也就是第0个元素的a的值加1为2,因此输出2
然后p++,p指向第一个元素
第二个printf,先执行右侧的(p++)->a,输出是p->a,也就是3,然后p指针后移,指向第2个元素。再执行(++p)->a,p指向第3个元素,输出a,也就是7