C基础——联合union

## 联合   是一种数据类型,可以在同一块内存空间中存储不同类型的数据,但这些数据同时一刻只能有一种存在。 ### (1)声明联合   声明形式与结构体类似。 ```C union hold { int digit; double bigfl; char letter; }; ```   以上声明的联合,一个联合变量可以存储一个int类型==或==一个double类型==或==一个char类型的数据   虽然同一类型的联合变量可以存储不同类型的数据,但他们在内存中的大小是相同的,即为声明中最大的类型所占据的字节数。例如,union hold类型的联合变量可以存储int类型或double类型或char类型的数据,但union hold类型的变量在内存中的大小都是8个字节,即为double类型所占的字节数。 ### (2)3种初始化方法   第1种,将一个联合变量初始化为另一个同类型的联合变量。 ```C union hold n1; n1.digit = 99.99; union hold n2 = n1; ```   第2种,将联合初始化为声明中的第1个成员 ```C union hold n = {100}; ```   第3种,使用指定初始化器,可以初始化为任意一个成员 ```C union hold n1 = {.letter = 'A'}; union hold n2 = {.bigfl = 199.99}; ``` ### (3)访问联合   与结构体一样,变量通过点运算符(.)访问联合成员,指针通过->访问。 ```C union hold n = {100}; //使用联合声明中的第1个成员初始化联合变量n union hold *ptu = &n //声明一个union hold类型的指针,指向&n n.bigfl = 31.4; //清除初始化的值,并将double类型数据赋值给联合变量n,通过点运算符访问bigfl成员 double d2 = ptu->bigfl; //指针通过指针访问联合成员,并为double类型变量b2赋值 ```   使用联合的技巧之一是,用一个成员存储值,然后用另一个成员,以不同的类型来查看这个值。   另一种使用方法是,在结构体中存储与其成员有从属关系的信息,例如。 ```C struct owner { char oname[21]; ... }; struct leaser { char lname[21]; ... }; union info { struct owner ocar; struct leaser lcar; }; struct car_info { int id; int status; // 私有为0,租赁为1 union inof holder_inof; //通过status的值决定holder_info的值 }; struct car_info car; ```   在结构变量c中,如果status的值为0,则程序将使用==car.holder_info.ocar.oname==;如果status的值为1,则程序将使用==car.holder_info.lcar.lname==   在结构体中的联合成员可以是匿名联合,与匿名结构的使用方式类似。
上一篇:使用octave的plot


下一篇:买卖股票的最佳时机含手续费