• 第十一章 共用体union和枚举enum


    共用体

    概念

    有时想用同一段内存单元存放不同类型的变量。例如,把一个短整型变量,一个字符型变量和一个实型变量放在同一个地址开始的内存单元中 1000地址。以上3个变量在内存中占的字节数不同,但都从同一地址开始(图中设地址为1000)存放,也就是使用覆益技术,后一个数据覆益了前面的数据。这种使几个不同的变量共享同一段内存的结构,称为“共用体”类型的结构。
    在这里插入图片描述

    定义方式和使用

    定义方式和结构体类似

    typedef union stu
    {
    	char a;
    	int b;
    	float c;
    }STU;
    int main()
    {
    	STU test;
    	test.b = 97;
    	printf("%d\n", sizeof(test));
    	printf("%c\n", test.a);
    	printf("%d\n", test.b);
    	printf("%f\n", test.c);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    ![运行结果](https://img-blog.csdnimg.cn/c5e3bad321d94c1799a417ee760aeafb.png

    结构体变量所占内存长度是各成员占的内存长度之和。每个成员分别占有其自己的存单元。
    而共用体变量所占的内存长度等于最长的成员的长度。

    特点

    1、同一内存段可以存放集中不同类型的成员,但每一瞬间只能由一种起作用
    2、共用体变量中起作用的成员是最后一次存放的成员。在存入一个新成员后原有的成员的值会被覆盖
    3、共用体变量的地址和他的各个成员的地址都是同一地址
    4、共用体变量的初始化

    union Data
    {
    	int i;
    	char ch;
    	float f;
    };
    int main()
    {
    	union Data a = { 16 };//对第一个变量赋值
    	union Data b = { .ch = 'A' };//对第二个变量赋值
    	printf("%d\n", a.i);//16
    	printf("%c\n", b.ch);//A
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    5、不能对共用体变量名赋值,同类型的共用体变量可以互相赋值。

    枚举

    概念

    枚举类型就是指把可能的值一 一列举出来,变量的值只限于列举出来的值的范围内。

    定义

    enum 枚举类型名{
    枚举值列表
    }

    enum Color {
    	red,blue,green,black,white
    };
    int main()
    {
    	enum Color sky = blue;//真确,blue是定义中的值
    	enum Color sky = a;//错误
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    注意:
    1、C编译对枚举类型的枚举元素按常量处理,故称枚举常量。不要因为它们是标识
    符(有名字)而把它们看作变量,不能对它们赋值。例如:
    blue = 1;
    2、每一个枚举元素都代表一个整数,C语言编译按定义时的顺序默认它们的值为0,1,2,3,4,5…。

    enum Color {
    	red, blue, green, black, white
    };
    int main()
    {
    	printf("%d\n", red);//0
    	printf("%d\n", blue);//1
    	printf("%d\n", green);//2
    	printf("%d\n", black);//3
    	printf("%d\n", white);//4
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    也可以人为地指定枚举元素的数值,在定义枚举类型时显式地指定,例如;

    enum Color {
    	red = 4, blue = 4, green = 2, black = 1, white = 7
    };
    int main()
    {
    	printf("%d\n", red);//4
    	printf("%d\n", blue);//4
    	printf("%d\n", green);//2
    	printf("%d\n", black);//1
    	printf("%d\n", white);//7
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    3、枚举元素可以用来作判断比较。例如;

    enum Color {
    	red = 4, blue = 4, green = 2, black = 1, white = 7
    };
    int main()
    {
    	enum Color sky = blue;
    	if (sky == blue) {
    		printf("%s", "sky is blue");
    	}
    	if(sky > red){
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
  • 相关阅读:
    关于前端研发质量提升的建设思路
    文献管理软件Zotero的安装和使用
    linux shell脚本语法和makefile总结
    Spring Boot 3 新特性及快速使用示例
    【C语言_题库】输入4个整数,要求按照从小到大的顺序输出
    谷粒商城13——订单模块完成、分布式事务应用、RabbitMQ、Seata、电商项目订单场景的分析完善
    Windows 10上安装Docker
    免费背景音人声分离解决方案MVSEP-MDX23,足以和Spleeter分庭抗礼
    Leetcode刷题详解——长度最小的子数组
    用Python在XML和Excel表格之间实现互转
  • 原文地址:https://blog.csdn.net/LookOutThe/article/details/133764281