预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共47页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

结构体与共用体结构体概述结构体的引入和一个学生有关的数据:姓名、性别、学号、年龄、家庭住址、学习成绩……为了方便处理多个数据项的数据,常把这些关系密切但类型不同的数据项组织在一起,即“封装”起来,并为其取一个名字,在C语言中,就称其为结构体。结构体通常是由不同数据类型的数据项组成,一般也称是由不同成员组成,因此可以说:一个结构体可包含若干成员,每一个成员可具有不同的名字及数据类型。结构体类型的定义结构体类型和简单类型不同,简单类型是由系统预定义的,如int、float、char,直接可以使用。而结构体类型是根据需要由程序员自行定义,因此在使用之前必须先定义结构体类型。结构体类型定义:例structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};说明:(1)定义一个结构体类型只是描述了此结构体的组织形式,在编译时并不为其分配存储空间,即仅描述此数据结构的形态或者说模型,故不能对定义的一个结构体类型进行赋值、存取或运算。结构体与共用体结构体变量结构体变量的定义与初始化1.结构体变量的定义先定义,再引用。一个结构体变量的定义可以有三种方式。structstud_type{charname[10];longnum;charsex;intage;floatscore;charaddress[10];};structstud_typestudent1,student2;(2)在定义类型的同时定义变量structstud_type{┇}student1,student2;(3)直接定义结构体变量struct{┇}student1,student2;说明:(1)在定义结构体类型时,系统并不分配内存空间,仅当定义结构体变量时,系统才为被定义的每一变量分配相应的存储单元。如上面定义的结构体变量student1、student2在内存中各占33个字节(10+4+1+4+4+10=33);(2)结构体变量的定义一定要在结构体类型定义之后或同时进行。2.结构体变量的初始化所谓结构体变量初始化,就是在定义结构体变量的同时,对其成员变量赋初值。在赋值时应注意按顺序及类型依次为每个结构体成员指定初始值。结构体初始化的一般格式为:struct结构体类型名结构体变量={初始化值};说明:(1)初始化数据之间用逗号分隔。(2)初始化数据的个数一般与成员的个数相同,若小于成员数,则剩余的成员将被自动初始化为0(若成员是指针,则初始化为NULL)。(3)初始化数据的类型要与相应成员变量的类型一致。不一致将强制类型转换。(4)初始化时只能对整个结构体变量进行,不能对结构体类型中的某个成员进行初始化赋值。structdate_type{intyear;intmouth;intday;};voidmain(){structstud_typestudent1={"wang",196103,'m',1978,10,12,98,"Xian"};structstud_typestudent2={"liu",196105,'m',1980,9,22,88,"Benjing"};printf("%d",student1.birthday.day);}结构体变量的引用1.对结构体变量成员的引用在C语言程序中,不准许对结构变量整体进行各种运算、赋值或输入输出操作,而只能对其成员进行此类操作。引用结构体变量成员的一般形式:结构体变量名.成员名其中“.”是结构体成员运算符,其优先级别最高,结合性是自左至右。由此对结构体成员就完全可以像操作简单变量一样操作它。如:对上例定义的结构体变量student1或student2,可作如下的赋值操作:student1.name[10]="wang";strcpy(student1.name,”wang”)student1.num=196103;student1.sex='m';student1.birthday.year=1978;student1.birthday.mouth=10;student1.birthday.day=12;student1.score=98;还可以如下操作:sum=student1.score+student2.score;scanf(“%s%d”,student1.name,&student1.num);printf(“%s%d”,student1.name,student1.num);2.对结构体变量整体的引用结构体变量和简单变量相比,除了上面所述在参加各种运算、赋值或输入输出方式上有所不同外——即是由结构体变量成员完成,其它同简单变量一样,如:(1)可以相互赋值,但注意相互赋值的两个结构体变量必须是同一个结构体类型;如:student