目录
一、联合体
1.1 联合体的定义
1.2 联合体的大小
//求代码输出的结果
#include <stdio.h>
union a
{
char c[5];
int i;
};
union b
{
short c[7];
int i;
};
int main()
{
printf("%d\n", sizeof(union a));
printf("%d\n", sizeof(union b));
return 0;
}
1.3 联合体的应用
由1.2可知,联合体比起结构体可以节省空间。所以试想一下这样一个场景:为商场做一个数据管理,囊括了衣服,食品等多个种类;这里面衣服有自己独特的尺码等信息,食品有独特的保质期等日期。但是它们都具有统一的价格,库存,类型等信息。所以代码可以这样写:
struct item_list
{
//共有属性
int item_type;
double price;
int stock_num;
//独有属性
union
{
struct
{
char size;
char material[20];
char color[20];
}clothes;
struct
{
char author[20];
char name[20];
}book;
struct
{
int date[50];
char position[50];
}food;
}
}
二、枚举
1.1 枚举的定义
1.2 枚举的使用
- 创建枚举变量
enum Day
{
Mon,
Tues,
Wed,
Thur,
Fri,
Sat,
Sun
};
int main()
{
enum Day day = Mon;
return 0;
}
- 枚举内成员的赋值
- 默认从零开始递增赋值
enum Day { Mon, Tues, Wed, Thur, Fri, Sat, Sun }; int main() { printf("%d\n",Mon); printf("%d\n", Tues); printf("%d\n", Wed); printf("%d\n", Thur); printf("%d\n", Fri); printf("%d\n", Sat); printf("%d\n", Sun); }
- 赋值操作
enum Day { Mon, Tues, Wed =5, Thur, Fri, Sat, Sun }; int main() { printf("%d\n",Mon); printf("%d\n", Tues); printf("%d\n", Wed); printf("%d\n", Thur); printf("%d\n", Fri); printf("%d\n", Sat); printf("%d\n", Sun); }
- 注意:枚举成员均为枚举常量,在枚举外部无法修改 。
1.3 枚举的优点
看完前文,相信有的读者会有这样的疑问:#define也可以定义常量,为什么要用枚举?
- 增加代码的可读性:代码明显比#define整洁。
- 枚举比起#define自带有类型检查,代码使用更加安全。
- 使⽤⽅便,⼀次可以定义多个常量,且自动赋值。