c语言里共用体的最后一次成员赋值问题求解
int main( ){ union exa { struct { int a; int b; }out; int c; int d; }e; e.out.a=10; e.out.b=20;e.c=2;e.d=5; printf("%d,%d ",e.out.a, e.out.b); return 0; }struct st{ int a; int b; union { int e; int f; }c;};int main( ){ struct st y; y.a=10; y.c.e=20; y.c.f=y.a; y.b=y.c.e; printf("%d,%d ",y.c.e,y.c.f); return 0; }union out { int a[2]; struct { int b; int c; }in; int d; }; int main() { union out e; int i; e.in.b=1; e.in.c=2; e.d=3; for(i=0;i<2;i++) printf("%5d",e.a[i]); printf(" "); return 0; }求解三个程序结果
一。对union exa:
exa.out.a=out.c=out.d
而exa.out.b因内存对齐(它在a后面),所以是独立的
所以结果
exa.out.a=e.d=5;
exa.out.b=20
二。对结构体st,
a,b,c是三个独立的变量,而c.e=c.f是同一地址
最终:
y.c.f=y.a=10
而y.c.e=y.c.f=10
三。对out
a[0]=in.b=d
a[1]=in.c
所以结果
a[0]=e.d=3
a[1]=e.in.c=2