一、共用体(联合体)
1.共用体的定义与声明
- 共用体的定义
union 类型名
{
数据类型 成员变量1;
数据类型 成员变量2;
数据类型 成员变量3;
数据类型 成员变量4;
...
}- 共用体的声明
和结构体一样,共用体变量声明有 3 种常见形式:
// 方式1:定义后单独声明
union data
{
int i;
char c;
float f;
};
union data a, b;
// 方式2:定义时声明变量
union data2
{
int x;
double y;
} c, d;
// 方式3:匿名共用体(仅使用一次,无名称)
union
{
char ch;
short s;
} e;2.共用体的特征
- 共用体每个成员变量的内存空间都是共享的
- 共用体也会用于函数参数的传递
- 共用体的大小,是最大成员变量的大小
3.共用体的应用
1.大小端判断
#include <stdio.h>
union data
{
int a;
char c;
};
int main()
{
union data data;
data.a = 0x12345678;
if(0x78 == data.c)
{
printf("little end\n");
}
else
{
printf("big end\n");
}
return 0;
}2.作为函数的参数传递的时候的不同选项(epoll)
4.共用体与结构体的区别
| 特性 | 共用体(union) | 结构体(struct) |
|---|---|---|
| 内存分配 | 所有成员共享同一块内存 | 成员各自占用独立内存,总大小 = 各成员大小之和(含对齐) |
| 成员访问 | 同一时间只能有效访问一个成员 | 可同时访问所有成员 |
| 大小计算 | 总大小 = 最大成员的大小(含对齐) | 总大小 = 各成员大小之和(含对齐) |
| 用途 | 节省内存、类型转换 | 组合不同类型数据,描述复杂对象 |
二、枚举
1.枚举的定义与声明
枚举:约定变量的取值范围。比如月份、周几。
//枚举值当常量值看,类型为整形(int)
enum 类型名 {枚举值1,枚举值2, 枚举值3,枚举值4 ,枚举值5, 枚举值6, ... };
//mon如果没有指定值,那么它的值就是0,后面枚举值就在一个的值的基础上+1
enum week {mon, tue, wed, thu, fri, sat, sun};
//当然也可一给每个枚举值赋新值进去
enum week {mon,tue=3,wed=4,thu=5,fri=6,sat,sun};关键规则:
- 枚举常量的值必须是整数(不能是浮点数、字符串)。
- 允许不同枚举常量赋值相同(但不推荐,失去唯一性)。
- 未显式赋值的成员,值为 “前一个成员的值 + 1”。
2.枚举的应用
- 和 switch 搭配使用
- 提高代码的可阅读性
代码示例:
#include <stdio.h>
enum week {mon, tue, wed, thu, fri, sat, sun};
typedef enum
{
jan,
feb,
march,
apri,
may,
ju,
july,
}month;
int main()
{
enum week week;
month mon = may;
int num = 0;
printf("input num (0~6):");
scanf("%d", &num);
week = num;
switch(week)
{
case mon:
printf("go to school\n");
break;
case tue:
printf("go to swim\n");
break;
case wed:
printf("go to read\n");
break;
case thu:
printf("go to study\n");
break;
case fri:
printf("go to pao dao\n");
break;
case sat:
printf("go to da wa\n");
break;
case sun:
printf("go to sleep\n");
break;
default:
printf("i don't know\n");
}
}到此这篇关于c语言中共用体和枚举的实现的文章就介绍到这了,更多相关c语言 共用体和枚举内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论