枚举顾名思义就是一一列举。
枚举的优点
我们可以使用#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 8printf("%d\n", sizeof(arr));//32return 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));//4printf("%p\n", &u);//三个地址一样printf("%p\n", &(u.c));printf("%p\n", &(u.i));u.i = 0;u.c = 'c';printf("%d\n", u.i);//99return 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));//8return 0;
}