枚举顾名思义就是一一列举。
枚举的优点
我们可以使用#define定义常量,为什么非要使用枚举?
1、增加代码的可读性和可维护性
2、和#define定义的标识符比较枚举有类型检查,更加严谨
3、防止了命名污染(封装)
4、便于调试
5、使用方便,一次可以定义多个常量
C语言源代码–预编译–编译–链接–可执行程序
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
enum Color
{
RED=2,
GREEN,
BLUE=8
};
int main()
{
int arr[BLUE] = { 0 };
printf("%d %d %d\n", RED, GREEN,BLUE);//2 3 8
printf("%d\n", sizeof(arr));//32
return 0;
}
联合-联合体-共用体
联合类型的定义
联合也是一种特殊的自定义类型,这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体)。比如:
联合体的特点
联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联合至少得有能力保存最大的那个成员)。
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
union Un
{
char c;
int i;
};
int main()
{
union Un u;
printf("%d\n", sizeof(u));//4
printf("%p\n", &u);//三个地址一样
printf("%p\n", &(u.c));
printf("%p\n", &(u.i));
u.i = 0;
u.c = 'c';
printf("%d\n", u.i);//99
return 0;
}
用联合体联合体判断大小端
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int check_sys()
{
union
{
char c;
int i;
}u;
u.i = 1;
return u.c;
}
int main()
{
int ret = check_sys();
if (ret)
{
printf("小端\n");
}
else
{
printf("大端\n");
}
return 0;
}
联合体大小的计算
联合大小的计算
联合的大小至少是最大成员的大小
当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。
比如:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
union Un
{
int a;
char arr[5];
};
int main()
{
union Un u;
printf("%d\n", sizeof(u));//8
return 0;
}