“struct结构体名”为结构体数据类型名字,使用结构体类型名才能在程序中定义结构体变量。③“数据类型名结构体成员i;”指定了结构体类型中的一个结构体成员,结构体成员必须像以前的变量定义一样进行说明,成员名的命名规则与变量名相同,要符合标识符的命名原则。④结构体类型定义语句是一条完整的C语句,所以结构体类型的声明要用“;”作为结束符。......
2025-09-30
在C语言中,枚举数据类型属于基本数据类型,但它并不是内置基本数据类型。程序中如果需要某种枚举类型仍然需要自行定义,枚举数据类型定义的一般形式为:
enum 枚举类型名{枚举元素标识符列表};
其中,enum是定义枚举类型的关键字,枚举元素必须使用合法的标识符予以表示。例如,下面语句定义了数据类型名为enum weekday的枚举数据类型:
enum weekday{Sun,Mon,Tue,Wed,Thu,Fri,Sat};
枚举元素标识符不是字符常量也不是字符串常量,定义时不要加单、双引号。枚举元素在同一程序中唯一的,即使在不同的枚举类型中也不能存在同名的枚举元素标识符。
编译器在编译程序时,会给每一个枚举元素指定一个整型常量值。若枚举类型定义中没有给元素指定整型常量值,默认情况下,整型常量值从0开始依次递增。因此,枚举数据类型weekday的7个元素Sun、Mon、Tue、Wed、Thu、Fri、Sat对应的整型常量值分别为0、1、2、3、4、5、6。
定义枚举类型时也可以从某一枚举元素开始指定起始值,从指定位置之后的每个枚举元素值依次递增1。还可以在枚举类型定义中对枚举元素起始值作多次改变,每次改变后枚举值从该处开始递增直到遇到下一次起始值的指定为止。例如,下面的枚举定义语句:
enum Weekday{Thu=4,Fri,Sat,Sun,Mon=1,Tue,Wed};
从Thu到Sun的枚举常量值依次为4、5、6和7,接着的Mon到Wed的枚举常量值依次为1、2和3。
枚举数据类型定义完成后,仍然需要定义枚举变量才能使用,常见的方法有:
①先定义枚举类型,然后定义枚举变量。例如:
enum weekday{Sun,Mon,Tue,Wed,Thu,Fri,Sat};
enum weekday a,b,c; //定义变量a,b,c
enum weekday day=Mon;//定义变量day并赋初值
②定义枚举类型与定义变量同时进行。例如:
enum weekday{Sun,Mon,Tue,Wed,Thu,Fri,Sat}a,b,c; //同时定义变量a,b,c
③只定义几个某种枚举数据类型的枚举变量。例如:enum{Sun,Mon,Tue,Wed,Thu,Fri,Sat}a,b; //定义无枚举数据类型名的变量a,b
使用枚举数据类型和枚举变量时必须注意以下几点:①不能在程序中修改枚举元素对应的整数值,例如:
enum weekday{Sun,Mon,Tue,Wed,Thu,Fri,Sat}day;(https://www.chuimin.cn)
day=Sun;
Sat=7;//错误,Sat不是变量,Sat表示某常量值②枚举变量只能用枚举元素标识符进行赋值,不能把对应的整型常数值直接赋给枚举变量。例如:
enum weekday{Sun,Mon,Tue,Wed,Thu,Fri,Sat}day;
day=Wed;day=3;//错误
如一定要把常数值赋给枚举变量,则必须用强制类型转换。例如:
day=(enum weekday)3;//与语句day=Wed;等效
③枚举类型变量和枚举类型数据可以进行关系运算。
枚举变量可与元素常量进行关系比较运算,同类枚举变量之间也可以进行关系比较运算,它们之间的关系运算是按它们表示的序号值进行的。例如:
enum weekday{Sun,Mon,Tue,Wed,Thu,Fri,Sat}day1,day2;
day1=Wed;
day2=Mon;
则表达式day2>day1的值为0,表达式Sat>day1的值为1。
④程序中不能直接输入或输出枚举变量的值(即枚举元素的标识符,如Mon),只能输入或输出枚举变量值对应的序号值。
【例11.1】 枚举变量的输入输出示例。
程序的运行结果为:
RED--0,YELLOW--1,GREEN--2
输入颜色号(0--2):2
颜色号2:GREEN
相关文章
“struct结构体名”为结构体数据类型名字,使用结构体类型名才能在程序中定义结构体变量。③“数据类型名结构体成员i;”指定了结构体类型中的一个结构体成员,结构体成员必须像以前的变量定义一样进行说明,成员名的命名规则与变量名相同,要符合标识符的命名原则。④结构体类型定义语句是一条完整的C语句,所以结构体类型的声明要用“;”作为结束符。......
2025-09-30
图5.3指针变量指针变量本身也是变量,所以指针变量在使用之前也需要定义。为指针变量赋值的方法有两种:一种是定义后,使用赋值语句的方式;另外一种是定义的同时进行初始化方式。......
2025-09-30
指针数组是一组有序的指针的集合。用一维指针数组处理二维数组示例。程序一次运行的结果为:11415019618955311556532879428指针数组还常用于处理若干个相关的一维数组,此时指针数组中的每个元素指向一个一维数组的首地址。上面程序综合使用了指针数组和二级指针变量,在数据对象的定义和初始化阶段完成后形成的处理结构如图8.9所示。......
2025-09-30
用户自己定义的结构体类型,与系统定义的标准类型一样,是可以用来定义结构体类型的变量。这种方法定义的结构体类型在程序后面不可使用,因为缺少完整的结构体类型名。......
2025-09-30
书写在特定函数内部时,用于向该函数声明被调用函数的特征,此时仅有书写了函数声明语句的函数知道被声明函数的存在。当被调函数与主调函数位于同一源文件,且被调函数的定义出现在主调函数之前时,不必对被调函数进行声明,其原因是编译系统此时已经知道了被调函数的所有特征。对被调函数不必进行声明的示例。......
2025-09-30
图5.12extern关键字对全局变量的作用例5.16程序中在第12行定义了全局变量x并赋初值为100,根据定义其作用域为第12~17行所构成的区间。图5.13extern关键字对全局变量的作用在图5.13中标注为②的源程序文件中定义了全局变量y,该全局变量默认的作用域范围为其定义所在的整个源程序文件。自动变量的生存期与其所在函数被调用运行的时间相同,并且自动变量的值在函数的多次调用中都不会保留。......
2025-09-30
习惯把用typedef声明的类型名用大写字母表示,以便与系统提供的标准类型标识符区别。用tpyedef可以声明数组类型、字符串类型,使用比较方便。用typedef只是对已经存在的类型增加一个类型名,而没有创造新的类型。使用typedef有利于程序的通用与移植。有时程序会依赖于硬件特性,用typedef便于移植,例如,有的计算机系统int型数据占用2个字节,而另一些机器则占用4个字节。......
2025-09-30
局部变量的作用域被限定在它们所定义的范围之内。局部变量在函数调用时的特征示例。图5.11全局变量与局部变量作用域重叠示意图在这种全局变量与局部变量作用域重叠的情况下,当程序的控制流程进入这个作用域重叠区域时必须要确定应该使用哪一个同名的变量。......
2025-09-30
相关推荐