C的实用笔记44 您所在的位置:网站首页 c语言enum占几个字节 C的实用笔记44

C的实用笔记44

2024-06-28 19:36| 来源: 网络整理| 查看: 265

1.枚举变量就是符号常量(枚举常量)的集合 2.枚举变量的四要素

与普通变量的四要素完全相同。

1、枚举类型变量的类型:也就是枚举类型,它是我们自创的类型,也是构造类型。它的声明通常不放在函数中,书写的方式就像全局变量,因为它要尽可能让程序中的所有位置都能使用这个类型声明。枚举类型的声明又有三部分:

enum关键字:表示构造的是枚举类型。枚举类型名:和结构体一样,编程习惯是用大写开头,小写开头虽然不出错,就是看起来太low了。枚举元素列表:枚举元素就是符号常量,且是整型常量(包括整型数和字符)。枚举元素之间用逗号隔开,最后一个枚举元素后面可以加逗号也可以不加逗号,可以给枚举元素赋值。枚举元素写成一行就行了。如果没有给给枚举元素赋值,那么枚举元素的值默认从0开始。比如说一周有七天,从星期一到星期天,我们把它写成枚举元素,按照模7余0、模7余1、..... .... 、模7余6的顺序写,那么就能定义出如下枚举类型: enum WeekDay { sun,mon,tue,wed,thu,fri,sat }; // 默认从0开始,因此整型常量sun=0,mon=1,tue=2,wed=3,thu=4,fri=5,sat=6

1、枚举类型的知识点:

枚举类型声明时,末尾加分号;同一个枚举类型中,枚举元素不能重名。 同一个枚举类型中,不允许有枚举元素重名 enum WeekDay { sun,mon,tue,wed,tue,fri,sat };

两个不同的枚举类型,它们里面的枚举元素也不能重名。 尽管枚举元素在不同的枚举类型中,但是由于枚举元素实际上就是符号常量,因此不能重名 enum WeekDay { sun,mon,tue,wed,thu,fri,sat }; enum Weekend { sat,sun };

枚举类型这个构造类型,决定了枚举变量占用空间的大小,系统会在程序运行或编译阶段给你静态分配好内存。可以肯定的是:枚举类型占用4个字节的空间,因为枚举元素只允许是整型常量表达式,而编译器会认为枚举变量就是一个整型变量。与int a; 中 类型名是int一个道理,这里enum Weekday 在概念上就相当于 int。

2、枚举变量的名字:是枚举变量定义时候的名字,与 int a; 中变量名是a一个道理。

3、枚举变量的地址:注意枚举元素是个右值,是没有存放在内存里的常量,它们没有也不允许取地址。枚举变量是左值,可以取地址。

4、枚举变量的值:编译器会把枚举变量当做一个整型变量,事实上可以给枚举变量赋任意整型表达式。

3.允许在声明枚举类型时指定若干个枚举元素的值

1、知识点:可以根据需要任意赋值,但是必须是整型表达式(比如10,'a')

enum WeekDay { sun=10,mon,tue='a',wed,thu,fri,sat }; 4.枚举变量的定义(测一下枚举变量和枚举元素的占用空间)

1、知识点:定义的方式和结构体和共用体很像,都有三种,考虑到我们不关心枚举变量,用哪种都无所谓。

枚举类型声明和枚举变量定义分开写。 #include enum WeekDay { sun,mon,tue,wed,thu,fri,sat }; int main(int argc, char const *argv[]) { enum WeekDay w; //w就是enum WeekDay类型的枚举变量 printf("%d\n", sizeof(w)); //4,因为编译器会把枚举变量当做一个整型变量。 printf("%d\n", sizeof(sun)); //4,因为sizeof最终处理的就是数据的类型,sun是整型常量 return 0; }

声明枚举类型,同时定义枚举变量:后面照样可以定义其他枚举变量 enum WeekDay { sun,mon,tue,wed,thu,fri,sat } w;

声明枚举类型时不写类型名,同时可以不定义枚举变量: 以下两种写法都是可以的,因为我们不关系枚举变量,只关心里面的枚举元素 enum { sun,mon,tue,wed,thu,fri,sat } w; enum { sun,mon,tue,wed,thu,fri,sat };

5.没法通过枚举变量引用枚举元素,方法是直接使用枚举元素(测一下枚举元素的值、地址)

1、知识点:可以直接使用枚举元素,枚举元素的值取决于枚举类型声明时,系统的默认值 & 人为修改。

例1: #include enum { sun,mon,tue,wed,thu,fri,sat }; int main(int argc, char const *argv[]) { printf("%d\n", sun); //0,首个枚举元素默认值是0 printf("%d\n", mon); //1,按照顺序,系统默认分配 return 0; } ========================================================================================== 例2: #include enum { sun,mon,tue=9,wed,thu,fri,sat }; int main(int argc, char const *argv[]) { printf("%d\n", sun); //0,首个枚举元素默认值是0 printf("%d\n", mon); //1,声明枚举类型时,给中间某个枚举元素赋值,不会影响前面的元素 printf("%d\n", tue); //9 printf("%d\n", wed); //10,声明枚举类型时,给中间某个枚举元素赋值,会影响后面的元素 return 0; }

2、知识点:枚举元素和数组名虽然都是常量,但是有差别。枚举元素是符号常量,是右值;数组名是地址常量,是不可修改的左值。因此,不能对枚举元素取地址。同时,也不能给枚举元素赋值。

#include enum { sun,mon,tue,wed,thu,fri,sat }; int main(int argc, char const *argv[]) { printf("%d\n", &sun); //错误,&运算符的表达式必须是左值或函数指示符 mon = 2; //错误,赋值语句左边必须是可修改的左值 return 0; } 6.枚举变量就是整型变量

1、知识点:枚举变量允许用整型数据或字符数据初始化或赋值,因为编译器把枚举变量当做整型变量,但实际上不这么用,只用枚举元素给枚举变量赋值。

#include enum WeekDay { sun,mon,tue,wed,thu,fri,sat }; int main(int argc, char const *argv[]) { enum WeekDay w; w = mon; printf("%d\n", w); //1,正常的用法 w = 10; printf("%d\n", w); //10,不正常但可行的用法 return 0; }



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有