资源预览内容
第1页 / 共45页
第2页 / 共45页
第3页 / 共45页
第4页 / 共45页
第5页 / 共45页
第6页 / 共45页
第7页 / 共45页
第8页 / 共45页
第9页 / 共45页
第10页 / 共45页
亲,该文档总共45页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第十章第十章 结构体与共用体结构体与共用体10.1 结构体及其类型定义结构体及其类型定义 数组 同种数据类型的集合 实际问题中:存在不同类型的数据构成的集合。例:建立学生档案每一个学生:学号(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;上述定义中: struct 关键词(保留字), 表示定义一种结构体类型。其一般形式: struct 结构体名 成员表列; 成员表列:类型标识符 成员名 以上仅说明了定义一种类型的方法,尚未定义变量。strudent 结构体名, 相当于类型名(int, float等)10.2 定义结构体变量定义结构体变量一、先定义结构体类型再定义结构体变量一、先定义结构体类型再定义结构体变量 有时为简化,可用宏定义: #define STUDENT struct student则定义x1, x2可简化成: STUDENT x1, x2;三种方法:例: struct student x1, x2; 则 x1, x2为student 型变量,x1, x2可存放student数据。struct student int num;char name20;char sex;int age;float addr30; x1, x2;一般形式 struct 结构体名成员表列 变量名表列;二、二、 在定义结构体类型的同时定义变量在定义结构体类型的同时定义变量:一般形式 struct 成员表列 变量名表列;即不出现结构体类型名几点说明 1. 类型名与变量名是不同的概念 2. 允许成员名又为另一个已定义的结构型变量 3. 每一个成员地位如同该类型的变量 4. 成员名与程序中的变量名可相同但意义不同三、直接定义结构类型变量三、直接定义结构类型变量struct date int month;int day;int year;一个嵌套定义的例子:struct studentint num;char name20;char sex;int age;struct date birthday;char addr30; x1, x2; x1或x2num name sex agebirthdaymonth dayyearaddr10.3 结构体类型变量的引用结构体类型变量的引用 引用结构体变量实质上为引用其成员 用分量运算符.优先级最高如:x1为student型变量,则 x1.num: 表示x1的学号 x1.name: 表示x1的名字 x1.birthday.day: 表示x1的出生日 1. 只能用成员,不可用结构体变量名直接运算2. 每一个分量的引用与其同类型的简单变量的引用相同。10.4 结构体变量的初始化结构体变量的初始化 struct student x1=8906, Li Ming , M, 25, 8, 3, 1928, Yu Lushan 123 与其它变量的初始化完全一样,结构体变量在定义时可初始化:10.5 结构体数组结构体数组同数组定义类似: struct student w3;则有三个元素w0, w1, w2. 每一个元素为一个结构student型变量。 w0.num: 表示w0的学号 w1.name: 表示w1的姓名对w数组也可初始化: struct student w3=8901, Li Ming , , , ;可省略大小说明,直接用赋初值确定其大小 struct student w =, ,;struct person char name20;int count; leader3=Li, o,Zhang , o, Fang , o;例:有三个侯选人,每一侯选人的数据包括其姓名和得票数,则可定义结构类型person和结构数组leader程序如下:struet person char name20; int count; leader3=Li, 0,Zhang , 0, Fang , 0;main ( )int i, j; chr leader_name20; for (i=1; i=10; i+)scanf (%s, leader_name);for (j=0; j3; j+) if (strcmp (leader_name, leaderj.name)= =0) leaderj.count+; printf (n);for (i=0; i3; i+) printf(%5s: %dn, leaderi.name, leaderi.count);运行情况如下: Li Li Fun Zhang Zhang Fun Li Fun Zhang Li count name LiZhangFun 0 0 0 Li : 4 Zhang : 3 Fun : 310.6 结构指针结构指针 一个结构型变量(如x1)也有一个起始地址称为结构指针。则p为指针变量,它可用来存放student型变量的地址numnameAddrpx1令p=&x1;一、将结构指针存贮一个变量中一、将结构指针存贮一个变量中结构指针结构指针变量变量如:struct student p;则p为x1的首地址. (p).name (p).score 或者用“ ”运算符, p num, pname, p score. 称为指向运算符, “ ”优先级高于+, 。则:p num+1(x1.num)+ +pnum +(x1.num)先使用x1.num, 再加1先使x1.num加1,再用x1.num访问x1的成员: 总结上述情况,引用结构变量中的成员有三种方法:(2) 用指针变量 (p).成员名 (p).num(3) 用指向运算符成员名 p num(1) 结构体变量名.成员名 x1.num例:struct student int num;char name20;char sex;int age;二、指向结构体数组的指针二、指向结构体数组的指针 与其他指向结构体数组的指针一样,可用指针指向结构体数组。 main ( ) struct student stu3=10101, Li Lin , M, , , ; struct student p; p=stu; while (pp1num)&(p1next!=NULL) p2=p1; p1=p1next;if (p0numnum, &stuscore);while (stunum!=0) head=insert(head, stu); print (input the inserted record: ); stu=(struct student * ) malloc(LEN);scanf(%ld, %f ,&stunum, &stuscore); 运行情况如下:input records:98101, 99 89103, 87 89105, 77 0, 0 Now, These 3 records are.89101 99.089103 87.089105 77.0 input the deleted number: 98103 delete: 89103Now, These 2 records are.89101 99.089105 77.0 input the deleted number: 98105 delete: 89105Now, These 1 records are.89101 99.0input the deleted number: 0 input the inserted record: 89104, 87 Now, These 2 records are.89101 99.089104 87.0input the inserted record: 89106, 65 Now, These 3 records are.89101 99.089104 87.089106 65.0input the inserted record: 0, 0Return
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号