《第11章结构体与共同体课件》由会员分享,可在线阅读,更多相关《第11章结构体与共同体课件(75页珍藏版)》请在金锄头文库上搜索。
1、结构体与共同体,数据类型分类,数据类型,基本类型,构造类型,指针类型,空类型,数组类型,结构体类型,共同体类型,基本类型数据在内存中开辟一定的空间,与其他变量没有关系。 char c1,c2; int i,j; float f;,c1,c2,i,j,f,数组数据开辟一段连续的空间,以存放一组类型相同的数据。这些类型相同的数组元素之间有一定的联系。 int a3;,a0,而有一些不同类型数据间存在着联系 如一个学生的信息有: 学号、姓名、性别、年龄 显然,这些信息属于不同的数据类型,不能用数组存放。 因为数组内元素类型一致。,想要有联系的存放一个学生的信息 就要将这些不同类型的数据存放到某一个特
2、殊的数据类型中 结构体,C语言允许用户自己指定这样一种数据结构,称为“结构体”(structure) 结构体(structure)是一种数据类型,把互相联系的不同类型的数据组合成一个有机的整体。,相当于用户自己定义了一种数据类型。 C没有提供这种现成的数据类型,必须在程序中建立所需的结构体类型。,任务:建立一个这样的数据类型 根据这种类型定义的每个变量要能够将学生的学号、姓名、性别、年龄、成绩、地址都存放进去,定义一个结构体,struct student int num; /* 学号 */ char name20; /* 姓名 */ char sex; /* 性别 */ int age; /*
3、 年龄 */ float score; /* 成绩 */ char addr30; /* 地址 */ ;,struct student int num; /* 学号 */ char name20; /* 姓名 */ char sex; /* 性别 */ int age; /* 年龄 */ float score; /* 成绩 */ char addr30; /* 地址 */ ;,声明结构体类型时所必须使用的关键字,结构体类型名,struct student int num; /* 学号 */ char name20; /* 姓名 */ char sex; /* 性别 */ int age; /
4、* 年龄 */ float score; /* 成绩 */ char addr30; /* 地址 */ ;,成员类型,成员名,结构体中的每一项数据称为结构体“成员”,struct student int num; /* 学号 */ char name20; /* 姓名 */ char sex; /* 性别 */ int age; /* 年龄 */ float score; /* 成绩 */ char addr30; /* 地址 */ ;,struct student int num; /* 学号 */ char name20; /* 姓名 */ char sex; /* 性别 */ int a
5、ge; /* 年龄 */ float score; /* 成绩 */ char addr30; /* 地址 */ ;,struct student int num; /* 学号 */ char name20; /* 姓名 */ char sex; /* 性别 */ int age; /* 年龄 */ float score; /* 成绩 */ char addr30; /* 地址 */ ;,struct student int num; /* 学号 */ char name20; /* 姓名 */ char sex; /* 性别 */ int age; /* 年龄 */ float score
6、; /* 成绩 */ char addr30; /* 地址 */ ;,struct student int num; /* 学号 */ char name20; /* 姓名 */ char sex; /* 性别 */ int age; /* 年龄 */ float score; /* 成绩 */ char addr30; /* 地址 */ ;,struct student int num; /* 学号 */ char name20; /* 姓名 */ char sex; /* 性别 */ int age; /* 年龄 */ float score; /* 成绩 */ char addr30;
7、/* 地址 */ ;,最后的分号不能省略!,与此同时,名字叫做student的结构体由6个成员组成,struct student,num,name20,sex,age,score,addr30,int,它们共同组成一个新的数据类型 struct student,6个成员有各自的类型,与数组不同的是结构体中的成员或叫做结构体中的元素可以是不同类型的,定义结构体变量,上面是对一个结构体类型的定义。 相当于定义了一个用户自己的存放数据的模型,并没有具体的数据。 struct student的效力和int,char,float效力一样,同属于数据类型。,就是说,我们现在有了一个全新的数据类型struc
8、t student 这个类型的数据应该是什么样的,应该包括什么,要占多少空间,是由我们自己来定的 struct student,int,char,float,想使用int这种类型的数据,就要在程序中定义一个整型变量。 int i; 要想存放结构体类型的数据,就要在程序中定义这种类型的“结构体变量”。 struct student stu1;,在前面已经定义的结构体struct student的基础上,定义两个结构体变量。 struct student student1,student2;,变量类型,变量名称,int i,j;,变量类型,变量名称,struct student student1;
9、,int a10;,共占内存字节:,2x10=20,共占内存字节:,?,2,1x20,1,2,4,1x30,59,struct student int num; char name20; char sex; int age; float score; char addr30; ; struct student student1,student2;,struct student int num; char name20; char sex; int age; float score; char addr30; student1,student2;,定义结构体同时定义变量,先定义结构体类型后定义变
10、量,结构体变量的两种定义方式,几点注意: struct student不是一个变量, 是一个数据类型! student1,student2才是变量名! 定义类型时不开辟内存,只有在定义变量后系统才分配内存空间。,任务:建立一个用以存放日期的结构体 包括年、月、日,struct date int year; int month; int day; ;,建立一个用以存放产品信息的结构体 包括产品名、产品代号、价格,struct product char name20; int number; float price; ;,建立一个用以存放图书信息的结构体 包括书名、书号、作者、出版社,struct
11、 book char name20; int number; char author20; char publish20; ;,建立一个用以存放空间某个点的结构体 包括三个点的坐标,struct point float x; float y; float z; ;,建立一个结构体,用以在空间中确定某个球 球心和半径,struct globe float x; float y; float z; float r; ;,结构体中的成员可以单独使用,作用与地位相当于普通变量。 成员名可以与程序中变量名相同,互不干扰。 一个结构体中的成员也可以是另外一个结构体变量。,建立一个结构体,用以在空间中确定某
12、个球体 球心和半径,struct globe float x; float y; float z; float r; ;,struct point float x; float y; float z; ;,struct point p1;,struct date int month; int day; int year; ; struct student int num; char name20; char sex; int age; struct date birthday; char addr30; student1, student2;,另外一个结构体变量,num,name20,sex,
13、age,birthday,addr30,month,day,year,结构体变量引用,方式:结构体变量.成员名 student1.num student1.num=1001; 用这种方式可以访问结构体中的成员。 这些成员可以当做普通变量一样使用,在程序中进行各种合法的运算。,struct student student1;,student1.num,student1.age,student1.addr,student1.name,struct student student1;,struct date birthday;,student1.birthday.month,student1.bir
14、thday.year,main() struct student int num; char name20; char sex; int age; float score; char addr30; ; struct student student1;,scanf(“%d”, ,EXP1100.C,结构体变量初始化,可以在定义时指定初始值 struct student long int num; char name20; char sex; char addr20; a=89031,Li Lin,M,123 Beijing Road;,EXP1101.C,struct student long
15、 int num=89031; char name20=Li Lin; char sex=M; char addr20=123 Beijing Road; a;,建立一个结构体变量(当然在这之前要先进行结构体的声明),用以存放一个球员的姓名、号码、年龄、身高、体重、以及在季后赛进总得分、篮板和助攻数。 分别从键盘输入这些信息到结构体变量中 再将这些信息输出,main() struct off int score; int reboard; int assit; ; struct player char name20; int num; int age; float height; float
16、weight; struct off p1; ; struct player player1;,scanf(%s,player1.name); scanf(%d,printf(%sn,player1.name); printf(%dn,player1.num); printf(%dn,player1.age); printf(%fn,player1.height); printf(%fn,player1.weight); printf(%dn,player1.p1.score); printf(%dn,player1.p1.reboard); printf(%dn,player1.p1.assit); getch();