如共用体定义为:
union
{
int n;
/* 整型二字节 */
char c;
/* 字符型一字节 */
}u1;
/* 共用体变量二字节(按共用体里最字节最高的) */
再看下面代码:
#include <stdio.h>
void main()
{
union
{
int n;
char c;
}u1;
printf("u1.n=%d u1.c=%d\n",u1.n,u1.c); /* 这里先输出u1.n和u1.c值,由于u1.n和u1.c没赋初值,所以输出值不定 */
u1.c=65;
/* 对u1.c赋值为65,u1.c是一字节,也就是只对共用体一个字节赋值,另一个字节还是原样 */
printf("u1.n=%d u1.c=%d\n",u1.n,u1.c);
/* u1.n为两字节,有一个字节还没赋初值,所以这里输出的u1.n值不对,输出u1.c是65 */
u1.n=0;
/* 再看这里,现在初值u1.n为0 */
u1.c=65;
/* u1.c赋值65 */
printf("u1.n=%d u1.c=%d\n\n\n",u1.n,u1.c);
/* 这样输出u1.n和u1.c都是65 */
getch();
}
最后说下,使用共用体一般都不采用这种方法。假如以上的整型u1.n换成双精度,u1.n的输出就不对了。
建义:在对共用体成员操作或输出时,先看这共用体成员是否赋初值再进行操作或输出。