联合
用union关键字定义的一个叫"量"的数据类型
typedef union {
short count;
float volume;
float weight;
} quantity;
联合的特点
1.可以有效的使用存储器空间
当定义联合的时候,计算机只为其中一个最大的字段分配空间,然后由你决定里面保存什么值(上面例子的name,age,weight都会存储在一个位置)
如何使用联合
1.c89方式:只能设置联合的第一个字段也就是上述中的name字段
例子:quantity a = {1};
2.指定初始化器:按名设置联合字段的值
quantity b = {.volume = 4.6};
3.点表示法:先创建变量,在设置字段的值
quantity c;
c.weight = 3.7;
注意:无论哪种方法设置联合的值,都只会保存一条数据。联合只是提供了一种让你创建支持不同数据类型的变量的方法
实例:
#include <stdio.h>
int main()
{
typedef union {
short count;
float volume;
float weight;
} quantity;
quantity a = {1};
quantity b = {.volume = 4.6};
quantity c;
c.weight = 3.7;
printf("%i,%f,%f", a.count, b.volume, c.weight);
return 0;
}
结构和联合一起使用
#include <stdio.h>
typedef union {
short count;
float volume;
float weight;
} quantity;
typedef struct {
const char *name;
const char *country;
quantity amount;
} fruit_order;
int main()
{
/*
此处的.amount表示fruit_order中的amount字段,.count表示quantity中的字段
*/
fruit_order apples = {"apple", "china", .amount.count = 20};
printf("%s,%s,%i", apples.name, apples.country, apples.amount.count);
return 0;
}