资源描述:
《C语言程序设计教程 教学课件 作者 王曙燕 Chapter9 结构体与共用体.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第9章结构体与共用体概述在事务处理中,常需要将一些关系密切但类型不同的数据项组织在一起,并为其取一个整体名字,形成一个结构。C语言中,就称其为结构体。结构体通常由不同数据类型的数据项(成员)组成一个结构体可包含若干成员,每个成员具有自己的名字及数据类型。结构体类型的定义和简单类型不同,结构体类型是根据需要由程序员自行定义,因此在使用之前必须先定义结构体类型一般格式:struct结构体名{结构体成员表;};struct是关键字,称为结构体定义标识符,而结构体名则由程序员自己命名。大括号中的结构体成员表包含若干成员,每一个成员都具有如下的形式:数据类型标识符成员名;structstud_type
2、{charname[10];longnum;charsex;intage;floatscore[5];charaddress[10];};对一个学生的描述,其结构体类型定义如下:说明:(1) 定义一个结构体类型只是描述了此结构体的组织形式,在编译时并不为其分配存储空间,即仅描述此数据结构的形态或者说模型,故不能对定义的一个结构体类型进行赋值、存取或运算。(2)结构体的成员可以是简单变量、数组、指针、结构体等。(3)结构体类型定义可以放在函数内部,也可以放在函数外部。若放在内部,则只在函数内有效;若放在外部,则从定义点到源文件尾之间的所有函数都有效。(4)结构体成员的名字可以同程序中的其它变量
3、同名,二者不会相混,系统会自动识别它。结构体变量结构体变量的定义(1)先定义类型再定义变量structstud_type{charname[10];longnum;charsex;intage;floatscore[5];};structstud_typestudent1,student2;(2)在定义类型的同时定义变量structstud_type{charname[10];longnum;charsex;intage;floatscore[5];}student1,student2;(3)直接定义结构体变量struct{charname[10];longnum;charsex;intag
4、e;floatscore[5];}student1,student2;说明:(1) 在定义结构体类型时,系统并不分配内存空间,仅当定义结构体变量时,系统才为被定义的每一变量分配相应的存储单元。(2)结构体变量的定义一定要在结构体类型定义之后或同时进行,对尚未定义的结构体类型,不能用它来定义结构体变量。结构体变量的初始化所谓结构体变量初始化,就是对其成员变量赋初值在赋值时应注意按顺序及类型依次为每个结构体成员指定初始值。一般格式:struct结构体类型名结构体变量={初始化值列表};说明:(1)初始化值列表中初始化数据之间用逗号分隔。(2) 初始化数据的个数一般与成员的个数相同,若小于成员数
5、,则剩余的成员将被自动初始化为0。(3)初始化数据的类型要与相应成员变量的类型一致。初始化时只能对整个结构体变量进行,不能仅对结构体类型中的某些成员进行初始化赋值。structdate_type{intyear;intmonth;intday;};structstud_type{charname[10];longnum;charsex;structdate_typebirthday;floatscore;};main(){structstud_types1={"wang",196103,'m',1978,10,12,98};structstud_types2={"liu",196105,'m
6、',1980,9,22,88};}结构体变量的引用对结构体变量成员的引用在C语言程序中,不允许对结构变量整体进行输入输出操作和除赋值外的各种运算,只能是对其成员进行此类操作。引用结构体变量成员的一般形式:结构体变量名.成员名其中“.”是结构体成员运算符,其优先级别最高,结合性是自左至右。如:对上例定义的结构体变量s1,s2,可如下操作:scanf("%s",s1.name);scanf("%f",&s1.score);s1.birthday.year=1978;s1.birthday.month=10;s1.birthday.day=12;s2.birthday.year=s1.birthd
7、ay.year+2;printf("%s=%f",s1.name,s1.score);若有以下定义,则正确的赋值语句为。structcomplex{floatreal;floatimage;};structvalue{intno;structcomplexcom;}val1;A)com.real=1;B)val1.complex.real=1;C)val1.com.real=1;D)val1.real=1;√