- 共用体
- 共同体和结构体类似,也是一种构造类型的数据结构,既然是构造类型的,咱们先定义除类型,然后用类型定义变量
- 定义共用体类型得方法和结构体非常相似,把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 以此类推
- 注意: 在定义枚举类型的时候枚举元素可以用等号给它赋值,用来代表它的数值,在程序中,不能再次对枚举元素赋值,因为枚举元素是常量
原文地址:https://www.cnblogs.com/fengzi759/p/11618715.html
时间: 2024-10-07 12:38:41