C语言联合体与枚举类型深入解析

创始人
2024-12-17 22:52:34
0 次浏览
0 评论

c语言中的共用体是什么?

所谓联合类型是指将不同的数据项组织为一个整体,它们在内存中占用相同的存储单元。
其定义形式为:UNION联合名{成员表列};联合数据{inta;floatB;}obj;该形式定义了联合数据类型UnionData。
UNION数据类型在结构上非常相似,但其含义和存储完全不同。
我们先来看一个小例子。
uniondata/*union*/{int;floatb;dbc;chard;}mm;structstud/*struct*/{int;floatb;dblc;chard;};main(){structstudstudent;printf("%d,%d",sizeof(structstud),sizeof(uniondata);}运行程序输出:15,8程序输出显示,结构体类型占用的内存空间为结构体类型占用的存储空间每个成员的空间总和。
看起来像结构体的联合类型实际上占用了其最长成员所占用的存储空间。
对联合成员的引用与对结构成员的引用相同。
但是,由于联合体的每个成员共享相同的内存空间,因此在使用时,请根据需要使用其中一个成员。
图中具体说明了UNION的特点,方便程序员在同一内存区域交替使用不同的数据类型,增加灵活性,节省内存。
联合变量的成员可以像结构体一样被引用。
如果联合类型定义为:uniondata/*union*/{inta;floatb;doublec;chard;}mm;其成员参考号为:mm.a、mm.b、mm.c、mm.d、但请注意,是的,不能同时引用四个成员,并且同一时间只能使用一个成员。
main(){uniondata{inta;floatb;doublec;chard;}mm;mm.a=6;printf("%d\n",mm.a);mm.c=67.2;printf("%5.1lf\n",mm.c);mm.d='W';mm.b=34.2;printf("%5.1f,%c\n",mm.b,mm.d);}运行程序的输出是:667.234.2,=程序最后一行的输出是意外的。
这是因为mm.d='W';毫米b=34.2;由于连续两次赋值语句,将联合变量mm.b的成员占用的4个字节写入34.2,写入的字符被覆盖,输出字符变成“=”符号。
事实上,字符输出是未知的,由写入内存的数据决定。
虽然例子很简单,但是它展示了联合变量的正确使用。

C语言的一个问题

Bprintf("%c\n",u1.n);//n未设置值。

c语言里的union和enum怎么用

1.Union

Union允许根据不同的数据类型访问同一块内存,数据实际上存储在同一位置。
它的声明和用法与结构体非常相似,但实际功能完全不同:

unionmodel_name{type1element1;pe2元素2;类型3元素3;.}object_name;

union中声明的所有元素占用相同的内存空间,其大小为声明中最长元素的大小。
例如:

unionmytypes_t{charinti;floatf;}mytypes;

定义了三个元素:

mytypes.c;mytypes.i;mytypes.f;

每一个都是不同的特定类型。
由于它们都指向相同的内存空间,因此更改一个元素的值将影响所有其他元素的值。

union的一种用途是将较长的基本类型与由其他较小数据类型组成的结构体或数组组合在一起,例如:

联合mix_t{长l;{    短 hi;    短 lo;  } s;   charc[4];}mix;

上面的例子中,定义了3个名字:mix.l、mix.s和mix.c通过这3个名字来访问同一个4字节的内存空间。
至于使用什么名字来访问,取决于你想要使用的数据类型,是long、short还是char。
下图展示了这个联合(union)的各个元素在内存中可能的结构,以及如何通过不同的数据类型来访问它:

2.枚举

1.枚举定义

枚举类型定义的一般形式为:

enumenumname{枚举值表};

在枚举中,值表必须列出所有可用的值。
这些值也称为枚举元素。

例如:

这个枚举称为“星期几”,有7个枚举值,即一周中的7天。
声明为星期几类型的变量的值只能是7天之一。

2、枚举变量的描述

与结构体和联合体一样,枚举变量也可以有不同的描述方式,即先定义然后解释。
还可以设置指令或直接指令。

假设变量a、b、c被描述为上面提到的星期几,可以使用以下方法之一:

枚举工作日{星期日、星期三、星期二、星期三、星期四、星期五、星期六};枚举星期几a,b,c;

或者:

枚举星期几{Sun,Wed,周二、周三、周四、周五、周六}a、b、c;

或:

enum{周日、周三、周二、周三,周四,周五,周六}a,b,c;

三、枚举类型变量的赋值和使用

枚举类型的使用遵循以下规定:

.枚举值是常量,而不是变量。
不能在程序中使用赋值语句为其赋值。

例如,将以下值赋给星期枚举的元素:

sun=5;我的;

他们都错了。

b.枚举元素本身被系统定义为代表序号的数值,从0开始,按顺序定义为0,1,2....例如,在星期,太阳值为0,星期一值为1,...,星期六值为6。

#includeintmain(){enum工作日{周日、周一、周二、周三、周四、周五、周六}a,b,c;un=sun;b=mon;c=tue;printf("%d,%d,%d",a,b,c);返回0;}

说明:

只能将枚举值赋值给枚举变量,元素值不能直接赋值给枚举变量。

a=sum; b=my;

正确。
且:

a=0; b=1;

为假。
如果需要给枚举变量赋值,则必须使用强制类型转换。

例如:

a=(enumweekday)2;

其含义是用顺序改变枚举number2将枚举元素赋值给枚举变量a相当于:

 

a=kill;
文章标签:
联合体 枚举
热门文章
1
C语言字符串常量解析:区别、用途及存储方... 什么是字符串常量字符串常量是C语言中的一种数据类型,它是由一对双引号括起来的字符...

2
C语言printf函数:格式字符串与输出... printf函数中的格式与输出项有什么关系?在C语言中,printf函数中的格式...

3
Excel技巧:计算字符串起始位置与合并... 如何计算字符串在特定文本中的起始位置,怎么计算字符串在特定文本中的起始位置您可以...

4
Python发音全解:掌握正确的发音方法... python怎么读我的很多学习编程的朋友可能都知道Python这个词,但是他们中...

5
字符与字符串:编程中的基础文本类型解析 字符串什么意思字符串是由数字、字母和下划线组成的字符串,表示为s=“a1a2…a...

6
Python编程语言:多领域应用与开发优... Python的作用是什么?Python是一种跨平台计算机编程语言,是ABC语言的...

7
深度解析:C语言编程特点与应用领域 什么叫c语言C语言是一种编程语言。C编程语言应用广泛,具有以下特点和特点:1.语...

8
Java全解析:跨平台编程语言的魅力与多... java是什么Java是一种功能强大的编程语言,被称为“一次编写,随处运行”模型...

9
C语言编程必备:20个核心术语解析与运行... c语言必背单词1.返回。2.价值。3.功能性。4.说明。5.外部外部。6.输入。...

10
深入解析:字符数组与字符串的区别与使用 字符串和字符数组有什么区别?字符数组与字符串不同。字符数组和字符串之间存在三个区...