资源描述:
《C语言-第7章结构体(成)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第7章结构体与共用体Contents7.1结构体7.2结构体数组7.3指向结构体类型数据的指针7.4结构体与链表7.5共用体7.6枚举7.7用typedef定义类型7.1结构体前面已介绍过数组,它存储的是一组相同类型的数据。但在实际问题中,一组数据往往具有不同的数据类型。例如,一个学生的信息包括学号、姓名、性别、年龄和成绩等。这些数据的类型各不相同:姓名为字符型,学号为整型或字符型,性别为字符型,年龄为整型,成绩为实型,这显然不能用一个数组存放。为了解决这一问题,C语言提供了一种构造数据类型——结构体,它能将
2、不同类型的数据存放在一起。一、结构体类型的定义struct结构体名{成员列表};例如,表示学生基本信息的结构体类型可定义如下:structstudent{intnum;charname[20];charsex;intage;floatscore;};7.1结构体二、结构体类型变量的定义1、先定义结构体再定义变量structstudent{……};structstudentstu1,stu2;为了使用方便,可以通过宏定义用一个符号常量来表示一个结构体类型,还可以用typedef来自定义数据类型。①#define
3、STUDENTstructstudentSTUDENT{intnum;……};STUDENTstu1,stu2;7.1结构体②typedef已有类型名新类型名;如:typedefintINTEGER;则INTEGERi;等价于如:typedefintNUM[10];则NUMa;等价于如:typedefchar*STRING;则STRINGp;等价于如:typedefstruct{intnum;……}STUDENT;STUDENTstu1,stu2;inti;inta[10];char*p;7.1结构体由此可见
4、,一个C程序结构一般为:#include……/*文件包含处理*/#define……/*宏定义*/typedefstruct/*定义结构体类型*/{……}STUDENT;intmax(intx,inty);/*函数说明*/main()/*主函数*/{……}intmax(intx,inty)/*子函数*/{……}7.1结构体注意:(1)结构体类型所占字节数=各成员所占字节数之和。(2)如何求结构体类型所占字节数?运算符sizeof——求某种数据类型所占字节数。如:sizeof(int)=2sizeof(float
5、)=4sizeof(structstudent)=2、定义类型同时定义变量structstudent{……}stu1,stu2;2+20+1+2+4=297.1结构体3、直接定义结构体类型变量(无结构体名)struct{……}stu1,stu2;说明:(1)一般采用“先定义类型再定义变量”。(2)成员名可与程序中的变量同名,但表示的是两个不同的量。(3)成员也可以为一个结构体。如:structdate{intyear;intmonth;intday;};structstudent{……structdatebi
6、rthday;};7.1结构体三、结构体变量的初始化(按顺序依次给各成员赋初值)如:structstudentstu={100,“Liu”,‘M’,19,95.5};不能写成:structstudentstu;stu={100,“Liu”,‘M’,19,95.5};说明:C允许对结构体变量进行初始化,但不允许将一组常量通过赋值语句直接赋给一个结构体变量。7.1结构体四、结构体变量的引用相同类型的结构体变量可相互整体赋值,但一般情况下,不能整体引用,只能对各个成员分别引用。如:structstudentstu1
7、,stu2={100,“Liu”,‘M’,19,95.5};stu1=stu2;如:printf(“……“,stu1);引用成员方式:结构体变量名.成员名如:printf(“……“,stu1.num,stu1.name,…);正确。注意:若成员本身为一个结构体,则需一级一级展开,只能对最低级的成员进行引用。如:printf(“……“,stu1.birthday);正确错误错误7.1结构体printf(“……“,stu1.birthday.year,stu1.birthday.month,stu1.birthd
8、ay.day);正确。【例7-1】设计一个程序,输入一个学生的信息并显示。【程序分析】假设学生信息包括:学号、姓名、性别、年龄和成绩,则定义一个结构体类型structstudent表示学生信息。7.1结构体structstudent{intnum;charname[20];charsex;intage;floatscore;};【程序源代码】#include"stdio.h"#include"str