C/C+编程笔记:C语言枚举与联合的区别,帮你一步步深度解析

联合与枚举很多小伙伴老是搞混了,这次记下来,与大家分享,希望大家能够有所收获。

enum是枚举型

union是联合型,共用体,成员共用一个变量缓冲区 现在基本已经不用了。

枚举类型

在实际问题中,有些变量的取值被限定在一个有限的范围内。例如,一个星期内只有七天,一年只有十二个月,一个班每周有六门课程等等。如果把这些量说明为整型,字符型或其它类型显然是不妥当的。为此,C语言提供了一种称为“枚举”的类型。在“枚举”类型的定义中列举出所有可能的取值,被说明为该“枚举”类型的变量取值不能超过定义的范围。应该说明的是,枚举类型是一种基本数据类型,而不是一种构造类型,因为它不能再分解为任何基本类型。

1.1 枚举类型的定义和枚举变量的说明

1. 枚举的定义枚举类型定义的一般形式为: enum 枚举名{ 枚举值表 };

在枚举值表中应罗列出所有可用值。这些值也称为枚举元素。

2. 枚举变量的说明

如同结构和联合一样,枚举变量也可用不同的方式说明,即先定义后说明,同时定义说明或直接说明。

设有变量a,b,c被说明为weekday,可采用下述任一种方式:

enum weekday{ sun,mou,tue,wed,thu,fri,sat };

enum weekday a,b,c;

或者为:

enum weekday{ sun,mou,tue,wed,thu,fri,sat }a,b,c;

或者为:

enum { sun,mou,tue,wed,thu,fri,sat }a,b,c;

1.2 枚举类型变量的赋值和使用 枚举类型在使用中有以下规定:

1. 枚举值是常量,不是变量。不能在程序中用赋值语句再对它赋值。

例如对枚举weekday的元素再作以下赋值: sun=5; mon=2; sun=mon; 都是错误的。

2. 枚举元素本身由系统定义了一个表示序号的数值,从0开始顺序定义为0,1,2…。

如在weekday中,sun值为0,mon值为1,…,sat值为6。

【例】 main(){

enum weekday

{ sun,mon,tue,wed,thu,fri,sat } a,b,c;

a=sun; b=mon; c=tue;

printf("%d,%d,%d",a,b,c); }

说明:

只能把枚举值赋予枚举变量,不能把元素的数值直接赋予枚举变量。如: a=sum; b=mon; 是正确的。而: a=0; b=1;

是错误的。如一定要把数值赋予枚举变量,则必须用强制类型转换。 如:

a=(enum weekday)2;

其意义是将顺序号为2的枚举元素赋予枚举变量a,相当于:

a=tue;

还应该说明的是枚举元素不是字符常量也不是字符串常量,使用时不要加单、双引号。

【例】

main(){

enum body { a,b,c,d } month[31],j;

int i;

j=a;

for(i=1;i

month[i]=j;

j++;

if (j>d) j=a;

}

for(i=1;i

switch(month[i])

{

case a:printf(" %2d %c\t",i,'a'); break;

case b:printf(" %2d %c\t",i,'b'); break;

case c:printf(" %2d %c\t",i,'c'); break;

case d:printf(" %2d %c\t",i,'d'); break;

default:break;

}

}

printf("\n");

联合(union):

一、联合说明和联合变量定义

联合也是一种新的数据类型, 它是一种特殊形式的变量。在现在全民学编程的潮流下,程序员想要成为一个优秀的、有能力程序员,做软件开发的话,就来学习C/C++吧,而且学习编程的话有一个学习的氛围跟交流圈子特别重要!手Q裙11零八;后一52零零零。想要成为更好的自己,不妨现在就开始学好编程。

联合说明和联合变量定义与结构十分相似。其形式为:

union 联合名

{

数据类型 成员名;

数据类型 成员名;

...

}联合变量名;

联合表示几个变量公用一个内存位置,在不同的时间保存不同的数据类型和不同长度的变量。

下例表示说明一个联合a_bc:

union a_bc

{

int i;

char mm;

};

再用已说明的联合可定义联合变量。

例如用上面说明的联合定义一个名为lgc的联合变量,可写成:

union a_bc lgc;

在联合变量lgc中, 整型量i和字符mm公用同一内存位置。

当一个联合被说明时, 编译程序自动地产生一个变量,其长度为联合中最大的变量长度。

联合访问其成员的方法与结构相同。同样联合变量也可以定义成数组或指针,但定义为指针时,也要用->符号, 此时联合访问成员可表示成:

联合名->成员名

另外, 联合既可以出现在结构内, 它的成员也可以是结构。

例如:

struct

{

int age;

char *addr;

union

{

int i;

char *ch;

}x;

}y[10];

若要访问结构变量y[1]中联合x的成员i, 可以写成:

y[1].x.i;

若要访问结构变量y[2]中联合x的字符串指针ch的第一个字符可写成:

*y[2].x.ch;

若写成y[2].x.*ch;是错误的。

希望对你有帮助!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200617A0U3FY00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券