C语言学习——union(联合体、共用体)及应用

C语言union(联合体、共用体)及应用

在结构体(变量)中,结构的各成员顺序排列存储,每个成员都有自己独立的存储位置。联合(union)变量的所有成员共享同片存储区/内存。因此联合变量每个时刻里只能保存它的某一个成员的值。

联合变量也可以在定义时直接初始化,但这个初始化只能对第一个成员进行。例如下面的描述定义了一个联合变量,并进行了初始化。

1 uunion data
2 {
3     char n;
4     float f;
5 };
6 union data u1 = {3}; //只有u1.n被初始化

union的主要特征有:

  1. union中可以定义多个成员,union的大小由最大的成员的大小决定;

  2. union成员共享同一块大小的内存,一次只能使用其中的一个成员;

  3. 对union某一个成员赋值,会覆盖其他成员的值(但前提是成员所占字节数相同,当成员所占字节数不同时只会覆盖相应字节上的值,比如对char成员赋值就不会把整个int成员覆盖掉,因为char只占一个字节,而int占四个字节);

  4. union量的存放顺序是所有成员都从低地址开始存放的。
    因此,可以用联合(union)来判断CPU的大小端(印第安序):

 1 int checkCPU()
 2 {
 3     union w
 4     {
 5         int a;
 6         char b;
 7     }c;
 8     
 9     c.a = 1;
10     
11     return ( c.b == 1 );
12 }

猜你喜欢

转载自blog.csdn.net/tonglin12138/article/details/93754079
今日推荐