枚举型是什么类型_C/C++编程笔记:C语言枚举与联合的区别,帮你一步步深度解析...

263b0af083f41d50ce69954d84c897f8.png

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

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;

文章福利

73defe3eb9d96a5892c3d362871109f5.png

领取方式:

C/C++项目领取​jq.qq.com

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<=30;i++){

month[i]=j;

j++;

if (j>d) j=a;

}

for(i=1;i<=30;i++){

switch(month[i])

{

case a:printf(" %2d %ct",i,'a'); break;

case b:printf(" %2d %ct",i,'b'); break;

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

case d:printf(" %2d %ct",i,'d'); break;

default:break;

}

}

printf("n");

c56c10bcd6b1683f8e2b6554c40be017.png

联合(union):

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

  联合也是一种新的数据类型, 它是一种特殊形式的变量。

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

  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;是错误的。

学习C/C++编程知识,提升C/C++编程能力,欢迎关注专栏:

C/C++编程学习聚集地​zhuanlan.zhihu.com
f58bc64ed1d79c9a4d769e9b42b99d41.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值