枚举体和共用体

枚举体

 

enum是枚举关键字

枚举体和共用体_第1张图片

 

{}内的量是枚举常量,枚举常量之间用逗号分隔(最后一个枚举常量后什么符号也不放)

 

枚举常量都有值,默认为第一个创建的枚举常量的值为0,第二个为1,以此类推。

 

也可以改变默认枚举常量的值

枚举体和共用体_第2张图片

 

只能在enum 后的{}中给枚举常量赋初始值

{}之外的枚举常量是常量,不可修改

 

同一程序不能有同名的枚举类型(enum 枚举名),且不同的枚举类型中不能存在同名的枚举成员

 

枚举变量的值只能是该变量的枚举类型例举出来枚举成员

 

不能将一个数值直接赋值给枚举变量,如enum sb a    

a=3是错误的

但是可以强制类型转换,将常数转换为对应枚举类型,但强制类型转换后赋值给枚举变量的数值依然要是该枚举变量里面有的值。

 

同类型的枚举数据可以进行关系运算和算术运算。

 

为什么要用枚举?

我们可以使用#define定义常量,为什么非要使用枚举?

 

枚举的相对于#define的优点:

1.增加代码的可读性和可维护性

2.和#define定义的标识符比较枚举有类型检查,更加严谨。

3.防止了命名污染(封装)

4.便于调试,#define是替换,不好调试。

5.使用方便,一次可以定义多个常量

 

共用体(联合体)

关键字:union

 

共用体的特点

 

共用体中的成员共用一个空间

一个成员用时,另一个成员不能用(跟共享单车一样,一个人扫码使用了,另一个人就扫不了这辆自行车)

且共用体变量以及所有成员的的起始地址一样

 

共用体的初始化

共用体的初始化是只能初始化一个成员,因为共用体中一次只能有一个有效数据

 

共用体的大小

 

共用体和结构体一样,也有内存对齐

不过共用体的内存对齐规则只有一条,就是共用体的总大小为共用体中成员的最大对齐数的整数倍

 

为什么只有一条对齐规则?

 

因为共用体的成员是共用同一块内存空间的,

如果一个共用体里有char   int   double三个类型的成员,就只需要double占据0~7偏移量就行了,因为用int类型成员时,根据共用体成员的起始地址相同,int只占据0~3偏移量。

 

共用体的大小, 至少是最大成员的字节大小,才根据对齐规则,就可以得到共用体的最终大小。

 

 

你可能感兴趣的:(c语言)