在C语言中,还有另外一种和结构体非常类似的语法,叫做共用体(Union),它的定义格式为:
union 共用体名{
成员列表
};
共用体有时也被称为联合或者联合体,这也是 Union 这个单词的本意。
结构体和共体的区别在于:结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。
例如
#include<stdio.h>
void main()
{
union{
int a;
int b;
}s[3],*p;
int n=1,k;
for(k=0;k<3;k++){
s[k].a=n;
s[k].b=s[k].a*2;
n+=2;
}
p=s;
printf("%d,%d\n",p->a,++p->a);
}
结果:
分析:
1.首先visual C++6.0 编译器; printf()函数从后面向前面运算,先算++p->a,再算p->a
2.“->”的优先级比”++”高,++p->a等价于++(p->a)
3.在三次循环中,k=0时,s[0].a=1,s[0].b=2,s[0].b把s[0].a的1覆盖,因此s[0].a=s[0].b=2;
k=1时,s[1].a=s[1].b=6;
k=2时,s[2].a=s[2].b=10,