- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
c语言学习,c语言课件第09章
第9章 结构体与共用体 9.1 结构体类型与结构体变量的定义 9.1.1 结构体类型的定义 9.2 结构体变量的引用与初始化 9.2.1 结构体类型变量的引用 引用结构体类型变量的一般形式为: 结构体类型变量名 .成员名 其中“.”是成员(分量)运算符,它在所有运算符中优先级最高。 说明: (1)结构体类型变量的各成员与相应的简单类型变量一样可以进行各种运算,例如: student2.score[1]= student1.score[1]; sum=stud1.score[0]+stud1.score[1]+stud1.score[2];(2)如果成员本身又属一个结构体类型,则要用若干成员运算符,一级一级地找到最低的一级成员。只能对最低级的成员进行赋值或存取以及运算。例如:student1. birthday.day=01;student1.birthday.month=10;student.birthday.year=2004; 9.3 结构体数组 9.4 指向结构体类型数据的指针 9.4.2 指向结构体数组的指针 9.5 共用体 9.6 枚举类型 9.7 用typedef定义类型 9.8 结构体应用举例 9.5.2 共用体变量的定义 共用体变量的定义与结构体变量的定义类似,也有三种方法: 1.先定义共用体类型,再定义共用体类型变量。 如: union data { int i; char ch; float f; }; union data un1, un2, un3; ? 这里先定义了共用体类型data,然后定义了三个共用体变量un1、un2、un3。 ?2.定义共用体类型同时定义共用体类型变量。 如: union data { int i; char ch; float f; } un1, un2, un3; 3.直接定义共用体类型变量。 如: union { int i; char ch; float f; } un1, un2, un3; 提倡使用第一种方法。 9.5.3 共用体变量的引用 共用变量体的引用与结构体变量一样,也只能逐个引用共用体变量的成员。 例如,访问共用体变量un1各成员的格式为:un1.i、un1.ch、un1.f。 说明: (1)共用体变量中,可以包含若干个成员及若干种类型,但共用体成员不能同时使用。在每一时刻,只有一个成员及一种类型起作用,不能同时引用多个成员及多种类型。 (2)共用体数据成员存储时采用覆盖技术,实现共用体变量各成员的内存共享,所以在某一时刻,存放的和起作用的是最后一次存入的成员值。 例如,执行un1.i=1, un1.ch=c, un1.f=3.14后,un1.f才是有效的成员。 (3)由于所有成员共享同一内存空间,故共用变量与其各成员的地址相同。 例如,&un1=&un1.i=&un1.ch=&un1.f。 (4)不能对共用变量进行初始化(注意:结构变量可以);也不能将共用变量作为函数参数,以及使函数返回一个共用数据,但可以使用指向共用变量的指针。 (5)共用类型可以出现在结构类型定义中,反之亦然。 【例9-5】设有若干人员的数据,其中有学生和教师,教师的数据中包括编号、姓名、职业、职务,学生的数据中包括编号、姓名、职业、班级。现要求把这些数据放在同表格中,如图9-3。 【思路导航】这些数据中,编号、姓名、职业是三个固定字段,第四个字段是动态字段,可能是职务(字符型),也可能是班级(整型),两个中选一个,故用共用体类型描述。假设考虑三个人员的数据,用结构体数组来描述。 /*exam9_5*/ #include stdio.h #include string.h union cf /*定义共用体cf*/ { int classes; /*班级*/ char position[10]; /*职务*/ }; struct { int num; /*编号*/ char name[10]; /*姓名*/ char job[4]; /* 职业 */ union cf categroy; /*该成员为共用体成员,存放班级或职务*/ }person[3]; /*定义结构体数组*/ int main(void) { int i; for(i=0;i3;i++) { printf(输入第%d个人员的资料:\n,i+1); scanf(%d%s%s,person[i].num,person[i].name, p
原创力文档


文档评论(0)