资源描述:
《第6章结构体与公用体》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第6章结构体与公用体6.1结构体概述6.1.1结构体的引入为了方便处理此类数据,常常把这些关系密切但类型不同的数据项组织在一起,即“封装”起来,并为其取一个名字,在C语言中,就称其为结构体(有些高级语言称之为记录)。结构体通常是由不同数据类型的数据项组成,一般也称是由不同成员组成,因此可以说:一个结构体可包含若干成员,每一个成员可具有不同的名字及数据类型。结构体的引入为处理复杂的数据结构提供了有力的手段,也为函数间传递一组不同数据类型的数据提供了方便,特别是对于数据结构较为复杂的大型程序提供了方便。6.1.2结构体类型的定义●简单类型是由系统预定义的,直接可以使用●结构体类型
2、是根据需要由程序员自行定义●使用之前必须先定义结构体类型●结构体类型定义格式:struct结构体名{结构体成员表;};●struct是关键字,称为结构体定义标识符,●结构体名则由程序员自己命名●大括号中的结构体成员表包含若干成员,每一个成员都具有如下的形式:数据类型标识符成员名;对一个学生的描述,其结构体类型定义如下:structstud_type{charname[10];/*姓名*/longnum;/*学号*/charsex;/*性别*/intage;/*年龄*/floatscore;/*成绩*/charaddress[10];/*家庭住址*/};说明(1)定义一个结构体
3、类型只是描述了此结构体的组织形式,在编译时并不为其分配存储空间,即仅描述此数据结构的形态或者说模型,故不能对定义的一个结构体类型进行赋值、存取或运算。(2)结构体的成员可以是简单变量、数组、指针、结构体或公用体等。(3)结构体类型定义可以放在函数内部,也可以放在函数外部。若放在内部,则只在函数内有效;若放在外部,则从定义点到源文件尾之间的所有函数都有效。(4)结构体成员的名字可以同程序中的其它变量同名,二者不会相混,系统会自动识别它。6.2结构体变量6.2.1结构体变量的定义与初始化1.结构体变量的定义●结构体变量也必须先定义,然后才能引用●结构体变量的定义可以有以下三种方式
4、:(1)先定义类型再定义变量形式:structstud_type{charname[10];longnum;charsex;intage;floatscore;charaddress[10];};structstud_typestudent1,student2;(2)在定义类型的同时定义变量structstud_type{┇}student1,student2;(3)直接定义结构体变量struct{┇}student1,student2;说明(1)在定义结构体类型时,系统并不分配内存空间,仅当定义结构体变量时,系统才为被定义的每一变量分配相应的存储单元。如:上面定义的结构体变
5、量student1、student2在内存中各占31个字节(10+4+1+2+4+10=31)(2)结构体变量的定义一定要在结构体类型定义之后进行,对尚未定义的结构体类型,不能用它来定义结构体变量。如:对一个教师teacher的结构体类型未作定义,则下面的变量定义是错误的;structteah_typeteacher;2.结构体变量的初始化●结构体变量初始化:在定义结构体变量的同时对其成员变量赋初值.●在赋值时应注意按顺序及类型依次为每个结构体成员指定初始值。格式:struct结构体类型名结构体变量={初始化值};说明(1)初始化数据之间用逗号分隔。(2) 初始化数据的个数一
6、般与成员的个数相同,若小于成员数,则剩余的成员将被自动初始化为0(若成员是指针,则初始化为NULL)。(3)初始化数据的类型要与相应成员变量的类型一致。例:structdate_type{intyear;intmouth;intday;};structstud_type{charname[10];longnum;charsex;structdate_typebirthday;floatscore;charaddress[10];};main(){structstud_typestudent1={"wang",196103,'m',1978,10,12,98,"Xian"};s
7、tructstud_typestudent2={"liu",196105,'m',1980,9,22,88,"Benjing"};}6.2.2结构体变量的引用1.结构体变量成员的引用●不准许对结构变量整体进行运算、赋值或输入输出等●只能是对其成员进行此类操作形式:结构体变量名.成员名“.”:成员运算符,优先级别最高,结合性自左至右。如:strcpy(student1.name,"wang");student1.name[10]="wang"student1.num=196103;student1.sex