3.1 枚举类型的定义
3.2 枚举的优点
3.3 枚举的使用
3.4 枚举类型的大小
4.1 联合类型的定义
4.2 联合的特点
4.2.1 特点阐述
4.2.2 特点应用----判断大小端
4.3 联合大小的计算
#include<stdio.h>
enum Day//星期
{
Mon,
Tues,
Wed,
};
int main()
{
printf("%d %d %d", Mon, Tues, Wed);
return 0;
}
运行截图:
{}中的内容是枚举类型的可能取值,也叫 枚举常量 。
这些可能取值都是有值的,默认从0开始,一次递增1,当然在定义的时候也可以赋初值。
例如:
#include<stdio.h>
enum Color//颜色
{
RED = 1,
GREEN,
BLUE = 4
};
int main()
{
printf("%d %d %d",RED,GREEN,BLUE);
return 0;
}
运行截图:
1. 增加代码的可读性和可维护性
2. 和#define定义的标识符比较枚举有类型检查,更加严谨。
3. 防止了命名污染(封装)
4. 便于调试
5. 使用方便,一次可以定义多个常量
enum Color//颜色
{
RED = 1,
GREEN = 2,
BLUE = 4
};
enum Color clr = GREEN;//只能拿枚举常量给枚举变量赋值,才不会出现类型的差异。
clr = 5;//ok?这样是不可以的,因为左右类型不一致
#include<stdio.h>
enum sex
{
MALE,
FEMALE,
SECRET
};
int main()
{
enum sex s = FEMALE;
printf("%d\n", sizeof(enum sex));
printf("%d\n", sizeof(s));
return 0;
}
运行截图:
结论:无论是枚举类型的大小,还是枚举类型的变量的大小,在内存中都是占据4个字节。
联合也是一种特殊的自定义类型 这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体)。
比如:
//联合类型的声明
union Un
{
char c;
int i;
};
//联合变量的定义
union Un un;
//计算连个变量的大小
printf("%d\n", sizeof(un));
printf("%p\n",&un);
printf("%p\n",&un.c);
printf("%p\n",&un.i);
运行截图:
联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联 合至少得有能力保存最大的那个成员)。
方法一:运用联合的方式
#include<stdio.h>
union S
{
int i;
char ch;
};
int check_sys()
{
union S s;
s.i = 1;
return s.ch;
}
int main()
{
union S s;
s.i = 1;
int ret = check_sys();
if (1 == ret)
{
printf("小端存储\n");
}
else
{
printf("大端存储\n");
}
return 0;
}
方法二:运用非联合的方式
#include<stdio.h>
int check_sys()
{
int a = 1;
return *(char*)&a;
}
int main()
{
int ret = check_sys();
if (1 == ret)
{
printf("小端存储\n");
}
else
{
printf("大端存储\n");
}
return 0;
}
(1)联合的大小至少是最大成员的大小。
(2)当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。
简而言之就是大于成员变量最大空间数,且是最大对齐数的整数倍。
比如:
union un
{
int a;//对齐数为4,默认对齐数为8,取较小值,即4
char arr[5];//最大成员的大小为5,对齐数为1(拿char来算,而不是拿整个数组所占的内存空间来算),默认对齐数为8,取较小值1
//所以联合体的最大对齐数为4,所以union un的内存空间的大小必须是4的倍数,同时还必须大于5,所以空间大小为8个字节
};
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/m0_57304511/article/details/122501569
内容来源于网络,如有侵权,请联系作者删除!