共用体变量的使用
程序中一般不能直接把共用体变量作为一个整体进行各种操作,也是通过成员运算得对共用体变量的各个成员变量的引用来完成各种运算和操作。
引用共用体变量成员的一般形式是:
共用体变量名.成员名
使用访问上面共用体变量u1的成员a采用如下方式:
u1.a
如果两个共用体变量使用同一个共用体类型定义,则它们之间可以相互赋值,例如上面定义的两个变量u1和u2之间可以相互赋值。
共用体变量在定义时也可以进行初始化工作,其一般形式如下:
union 共用型名 共用体变量名={成员1初值};
注意:共用体变量进行初始化工作时,赋值符右边的花括号中只能是第一个成员的初始
值,并且花括号是不能省略的。例如
union data
{
short a;
int b;
double c;
} ;
union data u={123};
【例】分析如下程序的运行结果。
源代码如下
#include<stdio.h>
union data
{
    short n;
    char c[];
};
int main()
{
    union data d;
    char x;
    d.n=0xFF11;
    printf("交换操作前:d.n=%d\n",d.n);
    x=d.c[];
    d.c[]=d.c[];
    d.c[]=x;
    printf("交换操作后:d.n=%d\n",d.n);
    return ;   
}
完整代码的程序运行结果:

运行结果分析:在本例中定义的共用体类型变量d有两个成员,成员n是short类型,占用2个字节内存,成员c是长度为2的char数组,也占用2个字节。注意成员n和c的内存空间是共用的。
程序第11行给成员n赋值为十六进制整数0xFfF11对应的二进制是1111111100010001。第12行以十进制有符号数形式输出的结果是-239。
程序第13行到15行对字符数组c的两个元素进行了交换,其中c[0]与n的第1个字节占用相同内存空间,其值二进制形式为11111111与n的第2个字节占用相同内存空间,其值二进制形式为00010001。这样交换c[0]和c[1],实际上也就是交换了成员n的第1个字节和第2个字节,交换后成员n的值的二进制形式为0001000111111111。
因此,程序的第16行以十进制有符号数形式输出成员n的结果是4607。