一、问题
联合体⼜名共⽤体,⽤共⽤体这个名字更能体现这个类型的特点,那就是所有成员变量共⽤⼀个内存单元。
联合体变量的这⼀特点决定了联合体变量的使⽤⽅法,即在某⼀时刻只有⼀个成员有意义,其他成员⽆意义。那么,怎么证明联合体的这⼀特性呢?
二、解答
为了证明联合体类型的成员变量是共享⼀个内存的,下⾯通过⼀个程序来进⾏说明。
例如,声明⼀个联合体类型有两个成员变量,⼀个是 int 型的数组,另⼀个是 char 型的数 组。先按照其中⼀个 int 型数组成员赋值,然后再按另⼀个 char 型数组成员输出。
若整型数组与字符型数组是共享⼀个内存的,那么输出的内容与写⼊的内容应该是⼀致的,否则结果不⼀致。相应程序代码如下。
#include <stdio.h>
int main()
{union ss{int a[6];char str[12];} u;u.a[0] = 0x6548;u.a[1] = 0x6c6c;u.a[2] = 0x216f;u.a[3] = 0x0000;printf("%s\n", u.str);
}
运⾏结果如下所示。
Hello!
由此程序可以看出,每个整形变量占两个字节,因此整型数组的⼀个位置中存放两个字符。分别将两个字符的 ASCII 码值转换成⼆进制数赋给数组成员,然后以字符串的形式输出。结果与整形数组中存放的⼆进制数所表⽰的字符相同,所以联合体成员的变量共享 ⼀个内存空间这个特性得到证实。
三、总结
在给整形数组赋值时,需要考虑联合体类型的⼤⼩端模式。联合体类型的存放顺序是从低字节到⾼字节。将⾼字节存放在⾼地址中,将低字节存放在低地址中,即所谓的⼩端模式。