众所周知,union为联合体,struct为结构体。下面根据实例谈谈用法
#include <stdio.h>
#include <string.h>
void main()
{
union{ /*定义一个联合*/
char i[6];
struct{ /*在联合中定义一个结构*/
char first;
char second;
char third;
char fourth;
unsigned short five;
}half;
}number;
strcpy(number.i,"abcdA");
printf("%c%c/n",number.half.first, number.half.second);
printf("%c%c%d/n",number.half.third, number.half.fourth,number.half.five);
}
union中各个变量是共用内存空间。上例中,char数组和结构体共用内存空间。正如程序输出结果
ab
cd65
char数组赋值,结构体中的变量就会按顺序获得数组中的值。
main()
{
union{ /*定义一个联合*/
int i;
struct{ /*在联合中定义一个结构*/
char first;
char second;
}half;
}number;
number.i=0x4241; /*联合成员赋值*/
printf("%c%c/n", number.half.first, mumber.half.second);
number.half.first='a'; /*联合中结构成员赋值*/
number.half.second='b';
printf("%x/n", number.i);
getch();
}
输出结果为:
AB
6261
从上例结果可以看出: 当给i赋值后, 其低八位也就是first和second的值;
当给first和second赋字符后, 这两个字符的ASCII码也将作为i 的低八位和高八
位。
参考文献
http://blog.ednchina.com/likee/20666/message.aspx