在C中,用到的结构,它是怎样输出的,程序请看补充,有点说不清:谢谢

来源:百度知道 编辑:UC知道 时间:2024/07/02 19:50:05
#include <stdio.h>
union t{
int a;
int b;}s[4],*p;
void main()
{int n=1,i;
for(i=0;i<4;i++)
{s[i].a=n;
s[i].b=s[i].a+1;
n+=2;
}
p=s;
printf("%d\n",p->a);
printf("%d\n",++p->a);
printf("%d\n",(++p)->a);
printf("%d\n",(p++)->a);
getch();
}
/*它的输出 是2 3 4 4,我不知道它是怎样来的,我想的输出应是2 5 8 8 ,不对,请高手帮我分析一下,谢谢*/

同楼上。
赋值后结果为s[0].b=2,s[1].b=4,s[2].b=6,s[3].b=8
第一个printf中 p指向s[0],s[0].a=2;
第二个printf中 由于->比++优先级高 故先计算p->a为2,++(p->a)为3
第三个printf中 ++p指向s[1],s[1].a=4
第四个printf中 P++是先使用P,然后将P++,故指向P->a仍为s[1].a=4

PS:其实4个输出中的a都应该换成b,共用体中最后存放的变量有效。此例因为a与b类型相同所有凑巧能够正确输出。

prefix 的++ 优先级不如 ->高, 所以 ++p->a 等价于 ++(p->a) 别的都容易理解