跨境派

跨境派

跨境派,专注跨境行业新闻资讯、跨境电商知识分享!

当前位置:首页 > 综合服务 > 物流仓储 > C语言中的联合体和枚举

C语言中的联合体和枚举

时间:2024-03-30 12:30:54 来源:网络cs 作者:纳雷武 栏目:物流仓储 阅读:

标签: 枚举  联合  语言 

联合体

联合体的创建

       联合体的关键字是union

union S{char a;int i;};

除了关键字和结构体不一样之外,联合体的创建语法形式和结构体的很相似,如果不熟悉结构体的创建,可以看一下我上一篇的博客关于结构体知识的详解。

联合体的特点

       联合体的成员是共用一块内存空间的,这也就是意味着它更节省空间,那也就是说明了联合体的使用,我们一般只对联合体其中一个成员进行赋值和使用,例如有些商品需要标上价格,外观,商品类型等信息时,有一些商品可能外观和商品类型只有一个的存在,这是如果用结构体来定义外观和商品类型这个成员时就会浪费空间,相反用联合体就会大幅度节省空间!

什么叫公用一块内存空间呢?如下图所示(以上面的联合体代码为例):

所以你在使用 i 的时候也会对 a 产生影响,你对 a 的使用也会对 i 产生影响。

联合体的大小计算

联合体的总大小为所右成员的最大对齐数的整数倍!!!
并且联合的总大小至少为最大成员的大小!!!

不了解对齐数的请看我上一篇文章!!!

举个例子:

#include <stdio.h>union Un1{char c[5];int i;};union Un2{short c[7];int i;};int main(){//下⾯输出的结果是什么?printf("%zd\n", sizeof(union Un1));printf("%zd\n", sizeof(union Un2));return 0;}

运行结果:

小练习

如何使用联合体来判断机器大小端存储?
根据联合体的内存分配,我们可以使用一下代码:

#include <stdio.h>union s{char a;int i;};int main(){union s S1;S1.i = 1;if (S1.a == 1){printf("小端存储\n");}else{printf("大端存储\n");}return 0;}

枚举

枚举的创建

       联合体的关键字是enum

enum COLOR{RED,GREEN,BLUE};

枚举的创建形式也是和结构体类似。

枚举常量

还是那上面的代码来举例,枚举内部成员是枚举常量,它们是有值的,一般来说,第一个成员是从0开始的,其他成员一次递增(也就是+1)来进行赋值的,我们来打印一下枚举的成员。

既然是枚举常量,也是说明不能在枚举范围外对枚举常量进行赋值,但是可以在枚举内部进行赋值。
如下代码表示:

enum COLOR{RED = 3,GREEN = 255,BLUE};

要注意了,没有赋值的枚举成员还是按照+1递增的形式进行赋值的、

枚举的优点

我们可以使⽤ #define 定义常量,为什么⾮要使⽤枚举?
枚举的优点:

增加代码的可读性和可维护性和#define定义的标识符⽐较枚举有类型检查,更加严谨。便于调试,预处理阶段会删除 #define 定义的符号使⽤⽅便,⼀次可以定义多个常量枚举常量是遵循作⽤域规则的,枚举声明在函数内,只能在函数内使⽤

总而言之,枚举也是给程序员提供了一种选择,大家根据实际情况合理使用即可!

本文链接:https://www.kjpai.cn/news/2024-03-30/150836.html,文章来源:网络cs,作者:纳雷武,版权归作者所有,如需转载请注明来源和作者,否则将追究法律责任!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

文章评论