共用体与枚举
Posted fengzi759
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了共用体与枚举相关的知识,希望对你有一定的参考价值。
-
-
共同体和结构体类似,也是一种构造类型的数据结构,既然是构造类型的,咱们先定义除类型,然后用类型定义变量
-
定义共用体类型得方法和结构体非常相似,把struct 改成union就可以
-
在进行某些算法得时候,需要使几种不同类型的变量存到同一段内存单元中,几个变量间相互重叠
-
这种几个不同的变量共同占用一段内存的结构,在C语言中,被称作"共用体"类型结构,共用体所有成员占有同一段地址空间
-
-
共用体的大小是其占内存长度最大的成员的大小
-
举例
-
typedef struct data
-
short int i;
-
char ch;
-
float f;
-
DATAL;
-
DATA temp1; 结构体变量temp1 最小占7个字节(不考虑字节对齐)
-
-
typedef union data
-
short int i;
-
char ch;
-
float f;
-
DATA;
-
DATA temp2; 共用体temp2占4个字节,即i、ch、f共用4个字节
-
printf("%d\n",sizeof(temp2));
-
printf("%p\n",&(temp2));
-
printf("%p\n",&(temp2.i));
-
printf("%p\n",&(temp2.ch));
-
printf("%p\n",&(temp2.f));
-
结果:temp2的大小为4个字节,下面几个地址都是相同的,证明了共用体各个成员占相同的内存单元
-
-
共用体的特点
-
同一内存段可以用来存放几种不同类型的成员,但每一瞬时只有一种起作用
-
共用体变量中起作用的成员是最后一次存放的成员,在存入一个新的成员后原有
-
共用体变量的地址和它的各成员的地址都是同一地址
-
共用体变量的初始化
-
-
union data a= 123;初始化共用体为第一个成员
-
举例
-
typedef union data
-
unsigned char a;
-
unsigned int b;
-
DATA;
-
int main()
-
DATA temp;
-
temp.b = 0xff ff ff ff;
-
printf("temp.b =%x\n",temp.b);
-
temp.a = 0x0d;
-
pritnf("temp.a = %x\n",temp.a);
-
pritnf("temp.b =%x\n",temp.b);
-
-
结果 temp.b = ffffffff temp.a =d temp.b = ffffff0d
-
-
-
枚举
-
将变量的值一一列举出来,变量的值只限于列举出来的值的范围内
-
枚举类型也是个构造类型的,既然是构造类型的数据类型,就得先定义类型,再定义变量
-
枚举类型的定义方法
-
enum 枚举类型名
-
枚举值列表:
-
;
-
在枚举值表中应列出所有可用值,也称为枚举元素
-
枚举变量仅能取枚举值所列元素
-
-
枚举变量的定义方法
-
enum 枚举类型名 枚举变量名;
-
-
举例
-
定义枚举类型 week
-
enum week //枚举类型
-
-
mon,tue,wed,thu,fri,sat,sun
-
;
-
enum week workday,weekday; //枚举变量
-
workday与weekday 只能取 sun.... sat中的一个
-
workday = mon;// 正确
-
workday = tue;//正确
-
workday = abc;// 错误,枚举值中没有abc
-
-
注意: 枚举值是常量。不能再程序中用赋值语句再对它赋值
-
列如 sun = 5; mon = 2; sun = mon;都是错误的
-
枚举元素本身由系统定义了一个表示序号的数组,默认是从0开始顺序定义为0,1,2...
-
如在week 中,mon值为0,tue值为1,....,sun值为6
-
-
可用改变枚举值的默认值:如
-
enum week //枚举类型
-
-
mon = 3, tue, wed,thu,fri=4,sat,sun
-
;
-
mon = 3 tue= 4,以此类推
-
fri = 4 以此类推
-
-
注意: 在定义枚举类型的时候枚举元素可以用等号给它赋值,用来代表它的数值,在程序中,不能再次对枚举元素赋值,因为枚举元素是常量
-
-
-
以上是关于共用体与枚举的主要内容,如果未能解决你的问题,请参考以下文章