第9章结构体等构造数据类型_第1页
第9章结构体等构造数据类型_第2页
第9章结构体等构造数据类型_第3页
第9章结构体等构造数据类型_第4页
已阅读5页,还剩78页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、l 结构体类型的数据由若干称为结构体类型的数据由若干称为“成员成员”的数据组成,每一个成员既可以是一个基的数据组成,每一个成员既可以是一个基本数据类型的数据,也可以是另一个构造本数据类型的数据,也可以是另一个构造类型的数据。类型的数据。 结构体实际上是结构体实际上是C编译没有提供的数据编译没有提供的数据类型,可以由程序员根据实际情况来自己类型,可以由程序员根据实际情况来自己构造的一种新的数据类型。构造的一种新的数据类型。 9.1.1 结构体的说明结构体的说明 为了描述起来简单,我们要先定义一为了描述起来简单,我们要先定义一个结构体类型:个结构体类型:time。time是时间,是时间,10点点3

2、0分分50秒就是一个时间数据,当然我们可秒就是一个时间数据,当然我们可以用三个整型变量来表示一个时间,以用三个整型变量来表示一个时间,int hour;int minute;int second; 不能表示三个变量之间的逻辑关系。不能表示三个变量之间的逻辑关系。 我们把时间说明为我们把时间说明为TIME ,而,而TIME含有小时、分、秒三个成分,则含有小时、分、秒三个成分,则TIME的结的结构体说明是:构体说明是:struct TIME int hour; int minute; int second; 其中其中struct 是关键字,是关键字,TIME是结构体是结构体的类型名,它实际上规定了

3、一种新的复杂数的类型名,它实际上规定了一种新的复杂数据类型。据类型。 于是在随后的程序中就可以使用于是在随后的程序中就可以使用TIME定义结构体变量了。定义结构体变量了。struct TIME audit_begin;结构体的说明方式:结构体的说明方式:struct 结构体名结构体名 成员表;成员表; 其中成员表可以由一个或几个成员组其中成员表可以由一个或几个成员组成,要说明每个成员的类型和名称,注意成,要说明每个成员的类型和名称,注意最后用分号结束。最后用分号结束。结构体变量的定义方式:结构体变量的定义方式:struct 结构体名结构体名 结构体变量表;结构体变量表; 结构体说明要注意下面几

4、点:结构体说明要注意下面几点:(1)结构体说明并不引起存储分配,结构体结构体说明并不引起存储分配,结构体变量的定义才引起存储分配。存储分配时,变量的定义才引起存储分配。存储分配时,通常按照各成员在结构体说明中出现的先通常按照各成员在结构体说明中出现的先后顺序依次排列。结构体成员的数据类型后顺序依次排列。结构体成员的数据类型可以是可以是C语言的基本数据类型,也可以语言的基本数据类型,也可以是数组和指针类型。是数组和指针类型。(2) 结构体成员还可以是另一个结构体类型,结构体成员还可以是另一个结构体类型,结构体说明可以嵌套。结构体说明可以嵌套。struct OBJECT struct TASK l

5、ong plan; long start; long finish; ti,tj; int count; ; OBJECT中嵌套定义了另外一个结构体中嵌套定义了另外一个结构体TASK。(3) 结构体说明不允许递归,也就是不允结构体说明不允许递归,也就是不允许在一个结构体说明中嵌套对自己的定义。许在一个结构体说明中嵌套对自己的定义。struct WRONG struct WRONG a; /*错误错误 */ int count; ;9.1.2 结构体变量的定义结构体变量的定义结构体变量定义有三种方法。结构体变量定义有三种方法。 第一种方法就是上面用过的:先说明结构第一种方法就是上面用过的:先说明

6、结构体,再定义结构体变量。体,再定义结构体变量。 第二种方法是在说明结构体类型的同时定第二种方法是在说明结构体类型的同时定义结构体变量。义结构体变量。例如:例如:struct TIME int hour; int minute; int second; audit_begin,audit_end; 这种方法的语法格式是:这种方法的语法格式是:struct 结构体名结构体名 成员表;成员表; 结构体变量表;结构体变量表; 第三种方法是在说明结构体时直接定义第三种方法是在说明结构体时直接定义结构体变量,并且不用指定结构体名。结构体变量,并且不用指定结构体名。struct int hour; int

7、 minute; int second; audit_begin,audit_end;这种形式的语法为:这种形式的语法为:struct 成员表;成员表; 结构体变量表;结构体变量表; 不能混淆结构体名和结构体变量这两不能混淆结构体名和结构体变量这两个概念。个概念。结构体名实际上标识了程序员定结构体名实际上标识了程序员定义的一种新的数据类型,编译系统不可能义的一种新的数据类型,编译系统不可能为结构体名分配内存空间。只有当变量被为结构体名分配内存空间。只有当变量被说明为这种由程序员自己定义的数据类型说明为这种由程序员自己定义的数据类型的结构体时,编译系统才会为结构体变量的结构体时,编译系统才会为结

8、构体变量分配存储空间。在不引起混淆的情况下,分配存储空间。在不引起混淆的情况下,结构体变量可以简称为结构体。结构体变量可以简称为结构体。9.1.3 结构体成员的引用结构体成员的引用 C语言中对结构体变量的使用是通过语言中对结构体变量的使用是通过对其成员的引用来实现的。一般不能对对其成员的引用来实现的。一般不能对结构体变量进行整体的引用。结构体变量进行整体的引用。引用的方法:引用的方法: 结构体变量名结构体变量名.成员名成员名 符号符号“.”是依据结构体变量名存取结是依据结构体变量名存取结构体成员的运算符。构体成员的运算符。例例9.1 用用符号符号“.”引用结构体变量的成员。引用结构体变量的成员

9、。#include stdio.hvoid main() struct TIME int hour; int minute; int second; struct TIME audit_begin; audit_begin.hour=8; /*为为audit_begin的每个成员赋值的每个成员赋值 */ audit_begin.minute=30; audit_begin.second=00; printf(n audition time is %02d:%02d:%02d, audit_begin.hour,audit_begin.minute, audit_begin.second); 注

10、意,注意,对嵌套结构体的引用必须引用对嵌套结构体的引用必须引用到最末一级。到最末一级。struct OBJECT struct TASK long plan; long start; long finish; ti,tj; int count; ob; 可以使用可以使用scanf(“%d”,&ob.ti.plan) 输输入数据。入数据。但是不能引用但是不能引用ob.ti 。9.1.4 结构体的初始化结构体的初始化 对结构体变量的初始化与对数组的对结构体变量的初始化与对数组的初始化相似,因为存储分配时,通常按照初始化相似,因为存储分配时,通常按照各成员在结构体中出现的先后顺序连续排各成员

11、在结构体中出现的先后顺序连续排列。列。struct TIME audit_begin=8,30,0; 如果初始化数值的个数小于结构体成如果初始化数值的个数小于结构体成员的个数,系统会自动将其它成员初始化员的个数,系统会自动将其它成员初始化为为0。例例9.2 结构体变量的初始化。结构体变量的初始化。#include stdio.hvoid main() struct TIME int hour; int minute; int second; ; struct TIME audit_begin=8,30,0; printf(n audition time is %02d:%02d:%02d, a

12、udit_begin.hour, audit_begin.minute, audit_begin.second); 9.2 结构体与数组结构体与数组 9.2.1结构体包含数组结构体包含数组 由于结构体的成员可以是任何基由于结构体的成员可以是任何基本数据类型和另外一个构造类型,所本数据类型和另外一个构造类型,所以结构体的成员当然可以是数组。以结构体的成员当然可以是数组。 下面我们说明一个可以描述一个股票下面我们说明一个可以描述一个股票信息的结构体:信息的结构体: struct STOCK char stockname8; /*股票名称股票名称 */ char stockcode6; /*股票代码

13、股票代码 */ float price3; /*买买 入价、卖出价、成交价入价、卖出价、成交价 */;例例9.3 结构体中包含数组。结构体中包含数组。#include stdio.hvoid main() int i; struct STOCK char stockname16; /*股票名称股票名称 */ char stockcode7; /*股票代码股票代码 */ float price3; /*买入价、卖出价、成交价买入价、卖出价、成交价 */ ; Struct STOCK sfz=ShenFaZhan,000001,8.77,8.78,8.78;/*用深发展的数据初始化结构体变量用深发

14、展的数据初始化结构体变量sfz*/ printf(n %s %s , sfz.stockname, sfz .stockcode); /*输出股票名称和股票代码输出股票名称和股票代码 */ for (i=0;i3;i+) /*输出股票的输出股票的买入价、卖出价和成交价买入价、卖出价和成交价*/ printf(%6.2f , sfz.pricei);9.2.2 结构体数组结构体数组 一个结构体变量只能存放一个结一个结构体变量只能存放一个结构体数据,假设有构体数据,假设有4个股票(或者更个股票(或者更多)的信息要描述,如何处理呢?多)的信息要描述,如何处理呢? 每一支股票用一个结构体变量来存储,每

15、一支股票用一个结构体变量来存储,四个就要用四个结构体变量来存储,这四四个就要用四个结构体变量来存储,这四个结构体变量的构成是完全一样的。个结构体变量的构成是完全一样的。 很容易想到用结构体数组:很容易想到用结构体数组:struct STOCK stock4; 定义结构体数组的语法:定义结构体数组的语法: struct 结构体名结构体名 数组名数组名长度长度; 访问结构体数组中的结构体成员访问结构体数组中的结构体成员的方法是:的方法是: 数组名数组名下标下标.成员名成员名例例9.4 输入四支股票的信息并输出。输入四支股票的信息并输出。#include stdio.hvoid main() int

16、 i,j; float temp; struct STOCK char stockname16; /*股票名称股票名称 */ char stockcode7; /*股票代码股票代码 */ float price3; /*买入价、卖出价、成交价买入价、卖出价、成交价*/ ; struct STOCK stock4; for (i=0;i4;i+) printf(Please enter stockname,stockcode and 3 price:n); scanf(%s%s, stocki.stockname, stocki.stockcode); for (j=0;j3;j+) /*输入股

17、票的买入价、卖出价输入股票的买入价、卖出价 和成交价和成交价 */ scanf(%f, &temp); /*读入价格读入价格 */ stocki.pricej=temp; for (i=0;i4;i+) printf(n %s %s , stocki.stockname, stocki .stockcode); for (j=0;j”,另一种是使,另一种是使用用运算符运算符“*”。l运算符运算符“-”由由“减号减号”和和“大于号大于号”构成。构成。用用运算符运算符“-”引用指针所指的结构体成员的引用指针所指的结构体成员的方法是:方法是: 结构体指针变量名结构体指针变量名-成员名成员名

18、b-hour 对应对应 begin.hour, b-minute 对应对应 begin.minute b-second 对应对应 begin.second。 l使用使用“*”运算符也可以通过指向结构体变运算符也可以通过指向结构体变量的指针访问结构体成员。用运算符量的指针访问结构体成员。用运算符“*”引引用指针所指的成员的方法是:用指针所指的成员的方法是: (*结构体指针变量名结构体指针变量名).成员名成员名 (*b).hour 对应对应 begin.hour, (*b).minute 对应对应 begin.minute, (*b).second 对应对应 begin.second。l注意:必须

19、用圆括号将注意:必须用圆括号将*b括起来,因为括起来,因为按照优先级和结合性,按照优先级和结合性, (*b.hour)将解释为将解释为*(b. hour ),这是没有意义的。,这是没有意义的。l两种方法中比较常用的是第一种,要注意两种方法中比较常用的是第一种,要注意的是:的是:“-”不是应用于结构体的,而是应不是应用于结构体的,而是应用于指向结构体的指针的。用于指向结构体的指针的。例例9.5 使指向结构体变量的指针。使指向结构体变量的指针。#include stdio.hvoid main() struct TIME int hour; int minute; int second; *p;

20、struct TIME audit_begin=8,30,0; /*初始化初始化audit_begin */ p=&audit_begin; printf(“n audition time is %02d:%02d:%02d”, p- hour,p-minute,(*p).second);例例9.6用姓名、工资和年龄描述一个人的情况,编写程序用姓名、工资和年龄描述一个人的情况,编写程序输入输入5个人的情况,为每个人增加工资个人的情况,为每个人增加工资30%、年龄加一、年龄加一岁,输出修改后的结果。岁,输出修改后的结果。#include stdio.h #define SIZE 5voi

21、d main() struct staff char name20; int salary; int age; attendSIZE; struct staff *ap; putchar(n); for (ap=attend;apname,&(ap-salary),&(ap-age); for (ap= attend;apage+; /*年龄增加一岁年龄增加一岁 */ ap-salary*=(1+.3); /*工资增加工资增加30% */ for (ap= attend;apname), (ap-salary),(ap-age);9.3.2 结构体中的成员包含指针结构体中的成员

22、包含指针例例9.7 初始化一组股票名称和股票代码,在程序初始化一组股票名称和股票代码,在程序中输出。中输出。#include stdio.hvoid main() int i; struct STOCK2 long stockcode; /*股票代码股票代码 */ char *stockname; /*股票名称股票名称 */ ; static struct STOCK2 stock4= 1,ShenFaZhan, 96,GuangJuNengYuan, 600868,MeiYanGuFen, 66,ChangChengDianNao; for (i=0;inext=q; q-next=NULL

23、; printf(n%20s %06ld ,p-stockname, p-stockcode); printf(n%20s %06ld ,(p-next)-stockname,(p-next)-stockcode);例例9.11链接两个动态分配的结构体变量。链接两个动态分配的结构体变量。#include stdio.h#include alloc.h#include string.hvoid main() struct STOCK2 long stockcode; /*股票代码股票代码 */ char stockname20; /*股票名称股票名称 */ struct STOCK2 *next

24、; /*指向一个象自己一样的结构体变量指向一个象自己一样的结构体变量*/ *p; p=(struct STOCK2*)malloc(sizeof(struct STOCK2); /*动态分配一个结构体变量,用动态分配一个结构体变量,用p指向它指向它 l if (p=NULL) return;l p-stockcode=1;l strcpy(p-stockname,ShenFaZhan);l p-next=(struct STOCK2*)malloc(sizeof(struct STOCK2); /*动态分配另一个结构体变量,用动态分配另一个结构体变量,用p-next指向它指向它*/l if (

25、p-next=NULL) return;l p-next- stockcode =96;l strcpy(p-next-stockname,GuangJuNengYuan);l p-next-next=NULL; l /*第二个结构体变量的第二个结构体变量的next项设置为空指针项设置为空指针 */l printf(n%20s %06ld ,p-stockname, p-stockcode);l printf(n%20s %06ld ,l (p-next)-stockname,(p-next)-stockcode);l9.4 结构体与函数结构体与函数9.4.1 结构体数据作为函数的参数结构体数

26、据作为函数的参数结构体数据作为函数的参数分为两种情况:结构体数据作为函数的参数分为两种情况:(1) 结构体变量的每个成员作为函数的实际结构体变量的每个成员作为函数的实际参数参数(2) 指向结构体的指针作为函数的实际参数指向结构体的指针作为函数的实际参数 整个结构体变量一般不允许作为函数整个结构体变量一般不允许作为函数的实际参数(有些编译系统允许)。的实际参数(有些编译系统允许)。例例9.13 结构体数据作为函数的参数。结构体数据作为函数的参数。#include stdio.hvoid show1(long code,char *name);void show2(struct STOCK2 *p

27、,int size);struct STOCK2 /*在函数外部说明结构体在函数外部说明结构体 */ long stockcode; char stockname20;void main() static struct STOCK2 stock4= 1,ShenFaZhan, 96,GuangJuNengYuan, 600868,MeiYanGuFen, 66,ChangChengDianNao; show1(stock0.stockcode, stock0.stockname); show2(stock,4); void show1(long code,char *name) printf(

28、%20s %06ldn, name ,code);void show2(struct STOCK2 *p,int size) struct STOCK2 *q; for (q=p;qstockname , q-stockcode);9.4.2 返回指向结构体的指针的函数返回指向结构体的指针的函数 函数能够返回指向结构体的指针。函数能够返回指向结构体的指针。若要函数返回指向结构体的指针,函若要函数返回指向结构体的指针,函数定义的首部应定义为:数定义的首部应定义为:struct 结构体名结构体名 *函数名函数名(参数表参数表)9.5 联合体联合体 联合体又称为公用体。联合体又称为公用体。 在编制一

29、些比较高级的程序时,有时在编制一些比较高级的程序时,有时需要把不同类型的变量放在同一存储区域需要把不同类型的变量放在同一存储区域内。内。 一个变量一个变量x,它既可以用来存储一个,它既可以用来存储一个单字符还可以存储一个浮点数或是一个整单字符还可以存储一个浮点数或是一个整数,当然,在一个时间点,它只能存放其数,当然,在一个时间点,它只能存放其中的一种数据,新的数据覆盖老的数据,中的一种数据,新的数据覆盖老的数据,新的数据是什么数据类型,新的数据是什么数据类型,x变量就是什么变量就是什么数据类型。数据类型。 要定义这种类型的变量,就必须要定义这种类型的变量,就必须首先说明一个联合体。首先说明一个

30、联合体。9.5.1 联合体的说明联合体的说明 联合体的说明与结构体的说明很联合体的说明与结构体的说明很相似,其格式为:相似,其格式为:union 联合体名联合体名 成员表成员表; 例如,例如,union mixed char c; float f; int i; mixed为联合体名,与说明结构体一样,为联合体名,与说明结构体一样,说明一个联合体,只是说明了一种新的数说明一个联合体,只是说明了一种新的数据类型,并不引起内存的分配。据类型,并不引起内存的分配。9.5.2 联合体变量的定义联合体变量的定义 联合体变量的定义方法也有三种,联合体变量的定义方法也有三种,(一一) 先说明联合体,再定义联

31、合体变量先说明联合体,再定义联合体变量(二二) 在说明联合体类型的同时定义联合体变在说明联合体类型的同时定义联合体变量量(三三) 直接定义联合体变量。直接定义联合体变量。 这三种方法与结构体变量的定义方法这三种方法与结构体变量的定义方法几乎没有区别。几乎没有区别。union mixed char c; float f; int i;union mixed x;union char c; float f; int i; x;union mixed char c; float f; int I x; 与结构体变量不同的是,联合体与结构体变量不同的是,联合体变量在内存中所占的字节数是成员表变量在内存

32、中所占的字节数是成员表中最大的,而不象结构体变量是所有中最大的,而不象结构体变量是所有成员所占字节数的总和。成员所占字节数的总和。union mixed x=a; 这时,系统按成员这时,系统按成员c对第一个字对第一个字节赋值,其余单元的值为节赋值,其余单元的值为0。9.5.3联合体变量成员的引用联合体变量成员的引用 对于联合体变量成员的直接引对于联合体变量成员的直接引用是使用运算符用是使用运算符“.”,语法是:联合,语法是:联合体变量名体变量名.成员名。成员名。 例如例如x.f,可以将,可以将x.f看成一个普看成一个普通的浮点型数据进行存取。通的浮点型数据进行存取。注意:注意: 不能对联合体变

33、量不能对联合体变量x直接存取内直接存取内容。容。 x=15.00是错误的,只能对是错误的,只能对x的三的三个成员进行操作,这三个成员是个成员进行操作,这三个成员是x.f、x.i和和x.c,并且这三个联合体成员不可,并且这三个联合体成员不可能同时存在。能同时存在。9.5.3联合体变量成员的引用联合体变量成员的引用 对于联合体变量成员的直接引对于联合体变量成员的直接引用是使用运算符用是使用运算符“.”,语法是:联合,语法是:联合体变量名体变量名.成员名。成员名。 例如例如x.f,可以将,可以将x.f看成一个普看成一个普通的浮点型数据进行存取。通的浮点型数据进行存取。例如,在下面的程序中,执行语句例

34、如,在下面的程序中,执行语句x.i=10;以后以后x.f的值是不能够确定的。的值是不能够确定的。 #include stdio.h union mixed char c; float f; int i; ; void main() union mixed x; x.i=10; printf(%f,x.f); /*x.f的值不确定的值不确定 */ 9.5.4指向联合体变量的指针指向联合体变量的指针 通过指向联合体变量的指针也通过指向联合体变量的指针也可以对联合体变量进行存取,使用可以对联合体变量进行存取,使用指向联合体变量的指针存取联合体指向联合体变量的指针存取联合体变量成员的语法格式是:变量成

35、员的语法格式是:(*指向联合体变量的指针指向联合体变量的指针).成员名成员名指向联合体变量的指针指向联合体变量的指针-成员名成员名例例9.19 使用指针引用联合体的成员。使用指针引用联合体的成员。#include stdio.hunion STOCK3 long stockcode; /*股票代码股票代码 */ char *stockname; /*股票名称股票名称 */ ;void main() union STOCK3 st,*p=&st; st.stockname=ShenFanZhan; printf(nstockname is %s, p-stockname); /*通过指针

36、引用联合体变量的成员通过指针引用联合体变量的成员 */9.5.5 联合体变量与函数联合体变量与函数 联合体变量的成员值可以作为函联合体变量的成员值可以作为函数的参数,联合体变量不能作为函数数的参数,联合体变量不能作为函数的参数,并且函数的返回类型也不能的参数,并且函数的返回类型也不能是联合体;但是,指向联合体变量的是联合体;但是,指向联合体变量的指针可以作为函数的参数,返回值也指针可以作为函数的参数,返回值也可以是指向联合体变量的指针。可以是指向联合体变量的指针。9.6 枚举枚举 使用枚举变量的主要目的是提高使用枚举变量的主要目的是提高程序的可读性,所谓程序的可读性,所谓“枚举枚举”就是把所就

37、是把所有可能的取值情况列举出来。例如,有可能的取值情况列举出来。例如,真和假表示了逻辑值的两种情况,男真和假表示了逻辑值的两种情况,男和女是性别的两种取值,选修课成绩和女是性别的两种取值,选修课成绩有有“优优”、“良良”、“中中”、“及格及格”和和“不及格不及格”五种取值。五种取值。 9.6.1 枚举的说明和枚举变量的定义枚举的说明和枚举变量的定义枚举的说明格式为:枚举的说明格式为:enum 枚举名枚举名 枚举元素表(逗号分隔)枚举元素表(逗号分隔);enum color red,green,blue,yellow,white;enum bool false,true; 枚举元素是常量,有固定

38、的数值,枚举元素是常量,有固定的数值,按枚举的顺序分别是整数按枚举的顺序分别是整数0、1、2,不,不能将其当作变量使用,也就是说不能在能将其当作变量使用,也就是说不能在赋值号的左边使用枚举元素。赋值号的左边使用枚举元素。 例如,例如,true=1;是错误的。是错误的。注意,注意,不能有两个相同名字的枚举元素,不能有两个相同名字的枚举元素,枚举元素也不能与其它的变量同名。枚举元素也不能与其它的变量同名。枚举变量的定义与结构体相类似,也有三枚举变量的定义与结构体相类似,也有三种:种:(1) 与枚举说明分开定义与枚举说明分开定义enum 枚举名枚举名 变量名表;变量名表;例如:例如: enum co

39、lor red,green,blue,yellow,white; enum color select,change;select和和change是枚举变量。是枚举变量。(2) 与枚举说明一起定义与枚举说明一起定义例如:例如: enum color red,green,blue,yellow,white select,change;(3) 不说明枚举名,直接定义枚举变量不说明枚举名,直接定义枚举变量例如:例如: enum red,green,blue,yellow,white select,change; 9.6.2 枚举变量的使用枚举变量的使用 枚举变量的使用与结构体变量枚举变量的使用与结构体

40、变量完全不同。完全不同。 如果一个变量被定义为是一个如果一个变量被定义为是一个枚举变量,则它的取值只能取自对枚举变量,则它的取值只能取自对应的枚举元素,而不能是其它任何应的枚举元素,而不能是其它任何数。数。如果有定义如果有定义 enum red,green,blue,yellow,white select,change; 则则select=red;和和change=white; 都是正确的,而都是正确的,而select=red_white是是错误的,因为错误的,因为red_white并没有在并没有在枚举元素表中出现。枚举元素表中出现。 枚举元素是常量,有固定的数值,枚举元素是常量,有固定的数值

41、,按枚举的顺序分别是整数按枚举的顺序分别是整数0、1、2,不,不能将其当作变量使用,也就是说不能在能将其当作变量使用,也就是说不能在赋值号的左边使用枚举元素。赋值号的左边使用枚举元素。 例如,例如,true=1;是错误的。是错误的。注意,注意,不能有两个相同名字的枚举元素,不能有两个相同名字的枚举元素,枚举元素也不能与其它的变量同名。枚举元素也不能与其它的变量同名。 C编译对枚举元素作为常整数处编译对枚举元素作为常整数处理,遇到枚举元素时,编译程序把理,遇到枚举元素时,编译程序把其中第一个枚举元素赋值为其中第一个枚举元素赋值为0,第,第2个赋值为个赋值为1,所以,所以select=red;和和

42、change=white;两句赋值语句执行以两句赋值语句执行以后,后,select的值为的值为0,change的值为的值为4。 C语言允许程序员将某些枚举元素语言允许程序员将某些枚举元素强制赋值,指定为一整数常量,被强制强制赋值,指定为一整数常量,被强制赋值的枚举元素后面的值按顺序逐个增赋值的枚举元素后面的值按顺序逐个增1。enum color red,green,blue=5,yellow,white /*实际值为实际值为0,1,5,6,7*/; 枚举元素是常量,有固定的数值,枚举元素是常量,有固定的数值,按枚举的顺序分别是整数按枚举的顺序分别是整数0、1、2,不,不能将其当作变量使用,也就是说不能在能将其当作变量使用,也就是说不能在赋值

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论