三、枚举
所谓枚举,就是一一列举
1.枚举的定义
枚举,全名又称枚举常量,属于常量中的一种。定义枚举常量的时候需要用到enum的关键字。
(1)定义格式
enum Sex//性别常量 { Man,//男 Woman,//女 Sercet,//保密 };
1.enum Sex称为枚举类型,Man、Woman和Sercet称为枚举常量
2.格式与结构体相似,但是每个枚举常量后面是逗号。
3.枚举常量的常量值默认从0开始。类似#define定义的常量一样,在后续的使用中他就是一个数字。
4.枚举常量的名字一般首字母大写或者全部大写,便于识别。
(2)打印枚举常量
#include<stdio.h> enum Sex//性别常量 { Man,//男 Woman,//女 Sercet,//保密 }; int main() { printf("%d\n", Man); printf("%d\n", Woman); printf("%d\n",Sercet); return 0; }
结果:
(3)修改默认值
第一种:修改起始值,后续的值会依次递增
#include<stdio.h> enum Sex//性别常量 { Man=5, Woman, Sercet, }; int main() { printf("%d\n", Man); printf("%d\n", Woman); printf("%d\n",Sercet); return 0; }
第二种:任意赋值
#include<stdio.h> enum Sex//性别常量 { Man=5, Woman=3, Sercet=100, }; int main() { printf("%d\n", Man); printf("%d\n", Woman); printf("%d\n",Sercet); return 0; }
注意:只能在定义的时候赋值,但是不能在后续的步骤中修改
2.枚举的的优点
(1) 增加代码的可读性和可维护性
(2)和#define定义的标识符比较枚举有类型检查,更加严谨。
枚举常量是有类型的(枚举类型),而#define定义的却没有
(3)防止了命名污染(封装)
(4)便于调试
(5)使用方便,一次可以定义多个常量
四、联合(共用体)
1.联合体的定义
(1)联合体是一种特殊的自定义类型,特征是这些变量公用一块空间。定义需要用到联合关键字union。
(2)代码格式
union Un { char c; int i; };
与结构体格式相同,但是关键字不一样。
联合变量的创建:
#include<stdio.h> union Un { char c; int i; }; int main() { union Un u1;//联合变量 printf("%zd",sizeof(u1));//计算联合变量的大小 return 0; }
2.联合体的特点
(1)特点
联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联
合至少得有能力保存最大的那个成员)。
#include<stdio.h> union Un { char c; int i; }; int main() { union Un u1; printf("%p\n", &u1); printf("%p\n", &(u1.c)); printf("%p\n",&(u1.i)); return 0; }
运行结果:
这三个的起始地址都一样,那在内存中是什么样的呢?
他们是公用一块内存的,如果修改其中一个,另一个是很有可能就被修改了。
(2)利用其特点解决的问题
利用联合体判断当前机器是小端还是大端字节序?
#include<stdio.h> int check_sys() { union Un { char c; int i; }u; u.i = 1; return u.c; } int main() { int ret = check_sys(); if (ret == 1) printf("小端\n"); else printf("大端\n"); return 0; }
原理:
返回的u.c,拿到的是i的第一个字节;如果小端存储。第一个字节(低字节)就会存储在低地址处,也就是起始位置,反之一样。
3.联合大小的计算
(1)联合的大小至少是最大成员的大小。(不一定就是最大的)
(2)当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。(蹲守结构体的内存对齐规则)
#include<stdio.h> union Un { char a[5]; int i; }; int main() { printf("%zd\n",sizeof(union Un)); return 0; }
联合体一般用于有公用部分的时候,如果商场的购物系统,很多商品都有共同的属性,如:价格等。