精品干货CHAR11(收藏).pdf
《精品干货CHAR11(收藏).pdf》由会员分享,可在线阅读,更多相关《精品干货CHAR11(收藏).pdf(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、cehua11结构体与共用体.111.1定义一个结构的一般形式.111.2结构类型变量的说明.211.3结构变量成员的表示方法.411.4结构变量的赋值.411.5结构变量的初始化.511.6结构数组的定义.511.7结构指针变量的说明和使用.711.7.1指向结构变量的指针.711.7.2指向结构数组的指针.911.7.3结构指针变量作函数参数.1011.8动态存储分配.1111.9链表的概念.1211.10枚举类型.1411.10.1枚举类型的定义和枚举变量的说明.1411.10.2枚举类型变量的赋值和使用.1511.11类型定义符 typedef.161111结构体与共用体结构体与共用体
2、11.111.1 定义一个结构的一般形式定义一个结构的一般形式在实际问题中,一组数据往往具有不同的数据类型。例如,在学生登记表中,姓名应为字符型;学号可为整型或字符型;年龄应为整型;性别应为字符型;成绩可为整型或实型。显然不能用一个数组来存放这一组数据。因为数组中各元素的类型和长度都必须一致,以便于编译系统 处理。为了解决 这个问 题,语言中给 出了另 一种构 造数据类 型“结构(structure)”或叫“结构体”。它相当于其它高级语言中的记录。“结构”是一种构造类型,它是由若干“成员”组成的。每一个成员可以是一个基本数据类型或者又是一个构造类型。结构既是一种“构造”而成的数据类型,那么在说
3、明和使用之前必须先定义它,也就是构造它。如同在说明和调用函数之前要先定义函数一样。定义一个结构的一般形式为:struct 结构名成员表列;成员表列由若干个成员组成,每个成员都是该结构的一个组成部分。对每个成员也必须作类型说明,其形式为:类型说明符 成员名;成员名的命名应符合标识符的书写规定。例如:struct stu int num;char name20;char sex;wenan1cehua float score;在这个结构定义中,结构名为 stu,该结构由 4 个成员组成。第一个成员为 num,整型变量;第二个成员为 name,字符数组;第三个成员为 sex,字符变量;第四个成员为
4、score,实型变量。应注意在括号后的分号是不可少的。结构定义之后,即可进行变量说明。凡说明为结构 stu 的变量都由上述 4 个成员组成。由此可见,结构是一种复杂的数据类型,是数目固定,类型不同的若干有序变量的集合。11.211.2 结构类型变量的说明结构类型变量的说明说明结构变量有以下三种方法。以上面定义的stu 为例来加以说明。1.1.先定义结构,再说明结构变量。先定义结构,再说明结构变量。如:struct stu int num;char name20;char sex;float score;struct stu boy1,boy2;说明了两个变量 boy1 和 boy2 为 stu
5、 结构类型。也可以用宏定义使一个符号常量来表示一个结构类型。例如:#define STU struct stuSTU int num;char name20;char sex;float score;STU boy1,boy2;2.2.在定义结构类型的同时说明结构变量。在定义结构类型的同时说明结构变量。例如:struct stu int num;char name20;char sex;float score;boy1,boy2;这种形式的说明的一般形式为:struct 结构名wenan2cehua成员表列变量名表列;3.3.直接说明结构变量。直接说明结构变量。例如:struct int nu
6、m;char name20;char sex;float score;boy1,boy2;这种形式的说明的一般形式为:struct成员表列变量名表列;第三种方法与第二种方法的区别在于第三种方法中省去了结构名,而直接给出结构变量。三种方法中说明的 boy1,boy2 变量都具有下图所示的结构。说明了 boy1,boy2 变量为 stu 类型后,即可向这两个变量中的各个成员赋值。在上述 stu结构定义中,所有的成员都是基本数据类型或数组类型。成员也可以又是一个结构,即构成了嵌套的结构。例如,下图给出了另一个数据结构。按图可给出以下结构定义:struct date int month;int day
7、;int year;struct int num;char name20;char sex;struct date birthday;float score;boy1,boy2;首先定义一个结构 date,由 month(月)、day(日)、year(年)三个成员组成。在定义并wenan3cehua说明变量 boy1 和 boy2 时,其中的成员 birthday 被说明为 data 结构类型。成员名可与程序中其它变量同名,互不干扰。11.311.3 结构变量成员的表示方法结构变量成员的表示方法在程序中使用结构变量时,往往不把它作为一个整体来使用。在 ANSI C 中除了允许具有相同类型的结构
8、变量相互赋值以外,一般对结构变量的使用,包括赋值、输入、输出、运算等都是通过结构变量的成员来实现的。表示结构变量成员的一般形式是:结构变量名.成员名例如:boy1.num即第一个人的学号boy2.sex即第二个人的性别如果成员本身又是一个结构则必须逐级找到最低级的成员才能使用。例如:boy1.birthday.month即第一个人出生的月份成员可以在程序中单独使用,与普通变量完全相同。11.411.4 结构变量的赋值结构变量的赋值结构变量的赋值就是给各成员赋值。可用输入语句或赋值语句来完成。【例 11.1】给结构变量赋值并输出其值。main()struct stu int num;char*n
9、ame;char sex;float score;boy1,boy2;boy1.num=102;boy1.name=Zhang ping;printf(input sex and scoren);scanf(%c%f,&boy1.sex,&boy1.score);boy2=boy1;printf(Number=%dnName=%sn,boy2.num,boy2.name);printf(Sex=%cnScore=%fn,boy2.sex,boy2.score);本程序中用赋值语句给num和name两个成员赋值,name是一个字符串指针变量。用scanf函数动态地输入 sex 和 score 成
10、员值,然后把 boy1 的所有成员的值整体赋予 boy2。最后分wenan4cehua别输出 boy2 的各个成员值。本例表示了结构变量的赋值、输入和输出的方法。11.511.5 结构变量的初始化结构变量的初始化和其他类型变量一样,对结构变量可以在定义时进行初始化赋值。【例 11.2】对结构变量初始化。main()struct stu /*定义结构*/int num;char*name;char sex;float score;boy2,boy1=102,Zhang ping,M,78.5;boy2=boy1;printf(Number=%dnName=%sn,boy2.num,boy2.na
11、me);printf(Sex=%cnScore=%fn,boy2.sex,boy2.score);本例中,boy2,boy1 均被定义为外部结构变量,并对 boy1 作了初始化赋值。在 main 函数中,把 boy1 的值整体赋予 boy2,然后用两个 printf 语句输出 boy2 各成员的值。11.611.6 结构数组的定义结构数组的定义数组的元素也可以是结构类型的。因此可以构成结构型数组。结构数组的每一个元素都是具有相同结构类型的下标结构变量。在实际应用中,经常用结构数组来表示具有相同数据结构的一个群体。如一个班的学生档案,一个车间职工的工资表等。方法和结构变量相似,只需说明它为数组类
12、型即可。例如:struct stu int num;char*name;char sex;float score;boy5;定义了一个结构数组 boy,共有 5 个元素,boy0boy4。每个数组元素都具有structstu 的结构形式。对结构数组可以作初始化赋值。例如:struct stu wenan5cehua int num;char*name;char sex;float score;boy5=101,Li ping,M,45,102,Zhang ping,M,62.5,103,He fang,F,92.5,104,Cheng ling,F,87,105,Wang ming,M,58;
13、当对全部元素作初始化赋值时,也可不给出数组长度。【例 11.3】计算学生的平均成绩和不及格的人数。struct stu int num;char*name;char sex;float score;boy5=101,Li ping,M,45,102,Zhang ping,M,62.5,103,He fang,F,92.5,104,Cheng ling,F,87,105,Wang ming,M,58,;main()int i,c=0;float ave,s=0;for(i=0;i5;i+)s+=boyi.score;if(boyi.score60)c+=1;printf(s=%fn,s);ave
14、=s/5;printf(average=%fncount=%dn,ave,c);本例程序中定义了一个外部结构数组boy,共5 个元素,并作了初始化赋值。在main 函数中用 for 语句逐个累加各元素的 score 成员值存于 s 之中,如 score 的值小于 60(不及格)即计数器 C 加 1,循环完毕后计算平均成绩,并输出全班总分,平均分及不及格人数。wenan6cehua【例 11.4】建立同学通讯录#includestdio.h#define NUM 3struct mem char name20;char phone10;main()struct mem manNUM;int i;
15、for(i=0;iNUM;i+)printf(input name:n);gets(mani.name);printf(input phone:n);gets(mani.phone);printf(nametttphonenn);for(i=0;i成员名例如:(*pstu).num或者:pstu-num应该注意(*pstu)两侧的括号不可少,因为成员符“.”的优先级高于“*”。如去掉括号写作*pstu.num 则等效于*(pstu.num),这样,意义就完全不对了。下面通过例子来说明结构指针变量的具体说明和使用方法。【例 11.5】struct stu int num;char*name;ch
16、ar sex;float score;boy1=102,Zhang ping,M,78.5,*pstu;main()pstu=&boy1;printf(Number=%dnName=%sn,boy1.num,boy1.name);printf(Sex=%cnScore=%fnn,boy1.sex,boy1.score);printf(Number=%dnName=%sn,(*pstu).num,(*pstu).name);printf(Sex=%cnScore=%fnn,(*pstu).sex,(*pstu).score);printf(Number=%dnName=%sn,pstu-num,
17、pstu-name);printf(Sex=%cnScore=%fnn,pstu-sex,pstu-score);本例程序定义了一个结构stu,定义了 stu 类型结构变量 boy1 并作了初始化赋值,还定义了一个指向 stu 类型结构的指针变量 pstu。在 main 函数中,pstu 被赋予 boy1 的地址,因此 pstu 指向 boy1。然后在 printf 语句内用三种形式输出 boy1 的各个成员值。从运行结果wenan8cehua可以看出:结构变量.成员名(*结构指针变量).成员名结构指针变量-成员名这三种用于表示结构成员的形式是完全等效的。11.7.211.7.2指向结构数组的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 精品 干货 CHAR11 收藏
限制150内