C 知识量:16 - 74 - 317
枚举类型通过使用enum关键字,来创建一个新“类型”并指定它可具有的值。实际上,enum常量是int类型,因此,只要能使用int类型的地方就可以使用枚举类型,枚举类型实际上是通过声明符号名称来表示整型常量。
使用枚举类型的目的是提高程序的可读性。其语法与结构的语法相同,例如:
enum setColor {red, orange, yellow, green, blue, violet}; enum setColor color;
以上代码中,red、oranger等符号常量被称为枚举符,它们是int类型,所以枚举变量(比如color)可以是任意整数类型,前提是该整数类型可以储存枚举常量。例如,setColor的枚举符范围是0~5,所以编译器可以用unsignedchar来表示color变量。
从技术层面看,枚举符red等都是int类型的常量。例如以下代码:
#include <stdio.h> int main(void) { enum setColor { red, orange, yellow, green, blue, violet }; printf("red = %d, orange = %d\n", red, orange); system("pause"); return 0; }
运行结果为:
red = 0, orange = 1
red成为一个有名称的常量,代表整数0。类似地,其他标识符都是有名称的常量,分别代表1~5。因此,在声明数组时,可以用枚举常量表示数组的大小;在switch语句中,可以把枚举常量作为标签。
默认情况下,枚举列表中的常量从0开始赋值。因此,下面的声明中c的值是2:
enum abc {a, b, c, d, e};
在枚举声明中,可以为枚举常量指定整数值,例如:
#include <stdio.h> int main(void) { enum abc { a, b, c = 10, d, e //将c赋值为10 }; printf("a = %d,b = %d,c = %d,d = %d,e = %d\n", a, b, c, d, e); system("pause"); return 0; }
运行结果为:
a = 0,b = 1,c = 10,d = 11,e = 12
由上面代码可以看出,如果只给一个枚举常量赋值,没有对后面的枚举常量赋值,那么后面的常量会被赋予后续的值。
C语言使用名称空间(namespace)标识程序中的各部分,即通过名称来识别。
作用域是名称空间概念的一部分:两个不同作用域的同名变量不冲突;两个相同作用域的同名变量冲突。
名称空间是分类别的。在特定作用域中的结构标记、联合标记和枚举标记都共享相同的名称空间,该名称空间与普通变量使用的空间不同。这意味着在相同作用域中变量和标记的名称可以相同,不会引起冲突:
struct d{ double x; double y; }; int d; // 在C中不会产生冲突
尽管如此,以两种不同的方式使用相同的标识符会造成混乱,因此不建议这样做。
Copyright © 2017-Now pnotes.cn. All Rights Reserved.
编程学习笔记 保留所有权利
MARK:3.0.0.20240214.P35
From 2017.2.6