《高级语言程序设计(c)12结构体和共用体.ppt》由会员分享,可在线阅读,更多相关《高级语言程序设计(c)12结构体和共用体.ppt(25页珍藏版)》请在三一办公上搜索。
1、结构体和共用体 1,梁春燕华电信息管理教研室,主要内容,结构体变量的定义结构体变量的引用结构体变量的初始化结构体数组结构体和指针小结上机作业 11,结构体,结构体是一种构造数据类型用途:把不同类型的数据组合成一个整体-自定义数据类型结构体类型定义,struct 结构体名 类型标识符 成员名;类型标识符 成员名;.;,成员类型可以是基本型或构造型,struct是关键字,不能省略,合法标识符可省:无名结构体,分号不能省,例 struct student int num;char name20;char sex;int age;float score;char addr30;,结构体类型定义描述结构
2、的组织形式,不分配内存,结构体类型定义的作用域,例子图解,先定义结构体类型,再定义结构体变量一般形式:,struct 结构体名 类型标识符 成员名;类型标识符 成员名;.;struct 结构体名 变量名表列;,结构体变量的定义,形式:,struct 结构体名 类型标识符 成员名;类型标识符 成员名;.变量名表列;,例 struct student int num;char name20;char sex;int age;float score;char addr30;stu1,stu2;,定义结构体类型的同时定义结构体变量,形式:,struct 类型标识符 成员名;类型标识符 成员名;.变量名
3、表列;,例 struct int num;char name20;char sex;int age;float score;char addr30;stu1,stu2;,用无名结构体直接定义变量只能一次,直接定义结构体变量,结构体类型与结构体变量概念不同类型:不分配内存;变量:分配内存类型:不能赋值、存取、运算;变量:可以 结构体可嵌套 结构体成员名与程序中变量名可相同,不会混淆 结构体类型及变量的作用域与生存期,说明:,引用规则 结构体变量不能整体引用,只能引用变量成员,可以将一个结构体变量赋值给另一个结构体变量结构体嵌套时逐级引用,成员(分量)运算符优先级:1结合性:从左向右,引用方式:结
4、构体变量名.成员名,结构体变量的引用,形式一:,struct 结构体名 类型标识符 成员名;类型标识符 成员名;.;struct 结构体名 结构体变量=初始数据;,例 struct student int num;char name20;char sex;int age;char addr30;struct student stu1=112,“Wang Lin”,M,19,“200 Beijing Road”;,结构体变量的初始化,struct 结构体名 类型标识符 成员名;类型标识符 成员名;.结构体变量=初始数据;,例 struct student int num;char name20;
5、char sex;int age;char addr30;stu1=112,“Wang Lin”,M,19,“200 Beijing Road”;,结构体变量的初始化形式二:,struct 类型标识符 成员名;类型标识符 成员名;.结构体变量=初始数据;,例 struct int num;char name20;char sex;int age;char addr30;stu1=112,“Wang Lin”,M,19,“200 Beijing Road”;,结构体变量的初始化形式三:,结构体数组的定义三种形式:,形式一:struct student int num;char name20;ch
6、ar sex;int age;struct student stu2;,形式二:struct student int num;char name20;char sex;int age;stu2;,形式三:struct int num;char name20;char sex;int age;stu2;,结构体数组,例 struct int num;char name20;char sex;int age;stu=,;,结构体数组引用,引用方式:结构体数组名下标.成员名,结构体数组初始化,struct person char name20;int count;leader3=“Li”,0,“Zh
7、ang”,0,”Wang“,0;main()int i,j;char 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+;for(i=0;i3;i+)printf(%5s:%dn,leaderi.name,leaderi.count);,例 统计候选人选票,指向结构体变量的指针定义形式:struct 结构体名*结构体指针名;例 struct student*p;,使用结构体指针变量引用成员形式,存放结构体变量在
8、内存的起始地址,指向运算符优先级:1结合方向:从左向右,例 int n;int*p=n=10,struct student stu1;struct student*p=(*p).num=101,结构体和指针,用结构体变量的成员作参数-值传递用指向结构体变量或数组的指针作参数-地址传递用结构体变量作参数-多值传递,效率低,用指向结构体的指针作函数参数,struct data int a,b,c;main()void func(struct data);struct data arg;arg.a=27;arg.b=3;arg.c=arg.a+arg.b;printf(arg.a=%d arg.b=
9、%d arg.c=%dn,arg.a,arg.b,arg.c);printf(Call Func().n);func(arg);printf(arg.a=%d arg.b=%d arg.c=%dn,arg.a,arg.b,arg.c);void func(struct data parm)printf(parm.a=%d parm.b=%d parm.c=%dn,parm.a,parm.b,parm.c);printf(Process.n);parm.a=18;parm.b=5;parm.c=parm.a*parm.b;printf(parm.a=%d parm.b=%d parm.c=%dn
10、,parm.a,parm.b,parm.c);printf(Return.n);,copy,例 用结构体变量作函数参数(1),struct data int a,b,c;main()void func(struct data*parm);struct data arg;arg.a=27;arg.b=3;arg.c=arg.a+arg.b;printf(arg.a=%d arg.b=%d arg.c=%dn,arg.a,arg.b,arg.c);printf(Call Func().n);func(,例 用结构体指针变量作函数参数(2),小结,小结,结构体变量的定义、引用和初始化:struct.
11、成员操作符 结构体数组的定义、引用和初始化;指向结构体的指针的用法-指向运算符,上机作业,上机作业11,试验目的掌握结构体类型变量的定义和使用;掌握结构体类型数组的概念和应用。,上机作业11,试验内容有5个学生,每个学生的数据包括学号、姓名、三门课的成绩;编写五个子函数:函数input,以表中的数据初始化5个学生的数据;函数average,求出每个学生的平均分;函数class_average,求出每门课的平均分;函数max,求出平均分最高的学生;函数class_max,求出每门课分数最高的学生.在主函数main中分别调用五个子函数,并输出五个学生的数据和平均分、三门课程的平均分、平均分最高和每门课分数最高的学生数据。,END,