共用体与枚举

  1. 共用体

    • 共同体和结构体类似,也是一种构造类型的数据结构,既然是构造类型的,咱们先定义除类型,然后用类型定义变量

    • 定义共用体类型得方法和结构体非常相似,把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

  2. 枚举

    • 将变量的值一一列举出来,变量的值只限于列举出来的值的范围内

    • 枚举类型也是个构造类型的,既然是构造类型的数据类型,就得先定义类型,再定义变量

    • 枚举类型的定义方法

      • 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 以此类推

      • 注意: 在定义枚举类型的时候枚举元素可以用等号给它赋值,用来代表它的数值,在程序中,不能再次对枚举元素赋值,因为枚举元素是常量

      •  

猜你喜欢

转载自www.cnblogs.com/fengzi759/p/11618715.html