第10章 结构体共用体.ppt

上传人:s****8 文档编号:82777542 上传时间:2023-03-26 格式:PPT 页数:97 大小:983.50KB
返回 下载 相关 举报
第10章 结构体共用体.ppt_第1页
第1页 / 共97页
第10章 结构体共用体.ppt_第2页
第2页 / 共97页
点击查看更多>>
资源描述

《第10章 结构体共用体.ppt》由会员分享,可在线阅读,更多相关《第10章 结构体共用体.ppt(97页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、程序设计基础程序设计基础(26)C语言语言/C+山东商业职业技术学院计算机系山东商业职业技术学院计算机系吕凤顺吕凤顺 Email:第10章 结构体与共用体本章大纲要求:本章大纲要求:(十)结构体(即(十)结构体(即“结构结构”)与共用体(即)与共用体(即“联合联合”)1结构体和共用体类型数据的定义方法和引用方法。结构体和共用体类型数据的定义方法和引用方法。2用指针和结构体构成链表用指针和结构体构成链表建立、输出、删除与插入。建立、输出、删除与插入。基本类型变量之间是相互独立的,无任何联系;基本类型变量之间是相互独立的,无任何联系;基本类型变量之间是相互独立的,无任何联系;基本类型变量之间是相互

2、独立的,无任何联系;数组只能用来表示一批相同类型的数据;数组只能用来表示一批相同类型的数据;数组只能用来表示一批相同类型的数据;数组只能用来表示一批相同类型的数据;有时需要将多个不同类型的数据作为一个整体来处理,例如有时需要将多个不同类型的数据作为一个整体来处理,例如一个班级有多个学生,而每个学生的学号、姓名、性别、年龄、一个班级有多个学生,而每个学生的学号、姓名、性别、年龄、成绩、地址等需要作为一个整体来处理。成绩、地址等需要作为一个整体来处理。C C语言用语言用语言用语言用“结构体结构体结构体结构体”类型处理由多个不同类型数据组成的数类型处理由多个不同类型数据组成的数类型处理由多个不同类型

3、数据组成的数类型处理由多个不同类型数据组成的数据集合,相当于其他语言或数据库中的据集合,相当于其他语言或数据库中的据集合,相当于其他语言或数据库中的据集合,相当于其他语言或数据库中的“记录记录记录记录”。10.1结构体类型的定义结构体类型的定义一、结构体类型定义格式一、结构体类型定义格式结构体是一种构造类型,该类型必须先定义,后使用。结构体是一种构造类型,该类型必须先定义,后使用。结构体是一种构造类型,该类型必须先定义,后使用。结构体是一种构造类型,该类型必须先定义,后使用。vvstructstruct 是定义结构体类型的关键字;是定义结构体类型的关键字;是定义结构体类型的关键字;是定义结构体

4、类型的关键字;“structstruct 结构体类型名结构体类型名结构体类型名结构体类型名”是创建结构体变量的是创建结构体变量的是创建结构体变量的是创建结构体变量的类型名类型名类型名类型名相当于相当于相当于相当于intint、floatfloat。v结构体结构体中的每项数据,称为结构体的中的每项数据,称为结构体的“成员成员”或或“分量分量”vv结构体类型名、成员名都是标识符。结构体类型名、成员名都是标识符。结构体类型名、成员名都是标识符。结构体类型名、成员名都是标识符。花括号后必须有分号花括号后必须有分号vv结构体成员可以是基本类型的变量、数组或指针,也可以是结构体成员可以是基本类型的变量、数

5、组或指针,也可以是结构体成员可以是基本类型的变量、数组或指针,也可以是结构体成员可以是基本类型的变量、数组或指针,也可以是其他结构体、共用体的变量、数组或指针其他结构体、共用体的变量、数组或指针其他结构体、共用体的变量、数组或指针其他结构体、共用体的变量、数组或指针可以嵌套定义。可以嵌套定义。可以嵌套定义。可以嵌套定义。structstruct 结构体类型名结构体类型名结构体类型名结构体类型名 类型类型类型类型成员名成员名成员名成员名1 1;类型类型类型类型成员名成员名成员名成员名n n;结构体类型的作用范围:结构体类型的作用范围:结构体类型的作用范围:结构体类型的作用范围:根据定义位置为局部

6、、全局的结构体类型;根据定义位置为局部、全局的结构体类型;根据定义位置为局部、全局的结构体类型;根据定义位置为局部、全局的结构体类型;引用其他文件定义的结构体,可用引用其他文件定义的结构体,可用引用其他文件定义的结构体,可用引用其他文件定义的结构体,可用#include#include包含该文件。包含该文件。包含该文件。包含该文件。structstudent/*学生结构体学生结构体*/intnum;/*学号学号*/charname20;/*姓名姓名*/floatscore;/*成绩成绩*/;/*语句末尾必须有分号语句末尾必须有分号语句末尾必须有分号语句末尾必须有分号*/例例结构体类型的定义结构

7、体类型的定义含有学生学号、姓名、性别、年龄、成绩、地址的结构体含有学生学号、姓名、性别、年龄、成绩、地址的结构体类型类型:structstudentintnum;/*学号学号*/charname20;/*姓名姓名*/charsex;/*性别性别*/intage;/*年龄年龄*/floatscore;/*成绩成绩*/charaddr30;/*地址地址*/;/*语句末尾必须有分号语句末尾必须有分号语句末尾必须有分号语句末尾必须有分号*/structstruct student是定义的结构体是定义的结构体类型类型名名名名,该类型包含有该类型包含有该类型包含有该类型包含有6 6个成员:个成员:个成员:

8、个成员:num、namename、sexsex、ageage、score和和和和addr。注意:注意:注意:注意:structstruct student只是声明了一种新的结构体只是声明了一种新的结构体只是声明了一种新的结构体只是声明了一种新的结构体类型类型类型类型,如同,如同,如同,如同charchar、intint、floatfloat不占据内存不占据内存不占据内存不占据内存不能存储数据。不能存储数据。不能存储数据。不能存储数据。结构体中的结构体中的结构体中的结构体中的数据成员数据成员数据成员数据成员不是变量的定义,只是纯粹的声明。如不是变量的定义,只是纯粹的声明。如不是变量的定义,只是纯

9、粹的声明。如不是变量的定义,只是纯粹的声明。如num、age等没有内存单元,只有用结构体等没有内存单元,只有用结构体类型类型定义定义定义定义结构体变量结构体变量结构体变量结构体变量时系统按各成员变量为时系统按各成员变量为时系统按各成员变量为时系统按各成员变量为结构体结构体结构体结构体变量变量变量变量分配内存以存放具体数据。分配内存以存放具体数据。分配内存以存放具体数据。分配内存以存放具体数据。二、结构体变量的定义二、结构体变量的定义1、先定义结构体类型,再单独定义结构体变量:、先定义结构体类型,再单独定义结构体变量:structstudent;structstudents1,s2;注意:注意:

10、注意:注意:第三种方法无法再定义新第三种方法无法再定义新第三种方法无法再定义新第三种方法无法再定义新的结构体变量。的结构体变量。的结构体变量。的结构体变量。定义结构体类型定义结构体类型定义结构体类型定义结构体类型structstruct student后,与系统定义的类型后,与系统定义的类型后,与系统定义的类型后,与系统定义的类型intint、longlong、floatfloat一样,可用来定义该类型的变量、数组、指针、函数等。一样,可用来定义该类型的变量、数组、指针、函数等。一样,可用来定义该类型的变量、数组、指针、函数等。一样,可用来定义该类型的变量、数组、指针、函数等。2、在定义结构体

11、类型的同时定义结构体变量:在定义结构体类型的同时定义结构体变量:structstudents1,s2;3、直接定义结构体变量直接定义结构体变量structs1,s2;C+结构体名可直接做为类型名结构体名可直接做为类型名structstudent;students1,s2;定义结构体变量就是按类型的定义为各成员依次分配内存。定义结构体变量就是按类型的定义为各成员依次分配内存。结构体变量的地址就是第一个成员的地址。结构体变量的地址就是第一个成员的地址。结构体变量占内存的字节数是各个成员占内存字节数的总和。结构体变量占内存的字节数是各个成员占内存字节数的总和。s1s1.nums1.names1.se

12、xs1.ages1.scores1.addrs2s2.nums2.names2.sexs2.ages2.scores2.addr59字节字节int2char20char1int2float4char30&s1三、结构体变量的引用三、结构体变量的引用 例例例例 定义一个结构体变量,存放一个教师的信息并输出。定义一个结构体变量,存放一个教师的信息并输出。定义一个结构体变量,存放一个教师的信息并输出。定义一个结构体变量,存放一个教师的信息并输出。#include#includestdio.hstdio.h main()main()structstructteacherteacher/*/*局部结构体

13、类型,作用域为本函数内局部结构体类型,作用域为本函数内局部结构体类型,作用域为本函数内局部结构体类型,作用域为本函数内*/charname20;charname20;/*/*姓名姓名姓名姓名*/charsex;charsex;/*/*性别性别性别性别*/intintage;age;/*/*年龄年龄年龄年龄*/charposition10;charposition10;/*/*职务职务职务职务*/floatsalary;floatsalary;/*/*工资工资工资工资*/;/*/*可在此分号前直接定义结构体变量可在此分号前直接定义结构体变量可在此分号前直接定义结构体变量可在此分号前直接定义结构体

14、变量*/structstructteacherteacher p p;/*/*定义结构体定义结构体定义结构体定义结构体局部变量局部变量局部变量局部变量p*/p*/strcpy(strcpy(p p.name.name,wangwang li li););/*/*给各成员赋值给各成员赋值给各成员赋值给各成员赋值*/p p.sex=f;.sex=f;p p.age=30;.age=30;strcpy(strcpy(p p.position.position,middle);,middle);p p.salary=1600;.salary=1600;printf(nprintf(nnamesexag

15、epositionsalary);namesexagepositionsalary);printf(n%-10s%3c%5d%10s%8.2f,printf(n%-10s%3c%5d%10s%8.2f,p p.name,.name,p p.sex,.sex,p p.age,.age,p p.position,.position,p p.salary);.salary);一般情况下,不能将结构体变量作为整体来使用,只能用一般情况下,不能将结构体变量作为整体来使用,只能用“成员运算符成员运算符”(分量运算符分量运算符)“.”引用其成员:引用其成员:结构体变量名结构体变量名.成员名成员名如果有运算:

16、如果有运算:如果有运算:如果有运算:p.age+p.age+则等价于:(则等价于:(则等价于:(则等价于:(p.age)+p.age)+例例例例 定义通讯录的结构体类型定义通讯录的结构体类型定义通讯录的结构体类型定义通讯录的结构体类型通讯录包含下列信息:姓名、年龄、电话、通讯地址;定义结通讯录包含下列信息:姓名、年龄、电话、通讯地址;定义结通讯录包含下列信息:姓名、年龄、电话、通讯地址;定义结通讯录包含下列信息:姓名、年龄、电话、通讯地址;定义结构体变量,输入数据并输出。构体变量,输入数据并输出。构体变量,输入数据并输出。构体变量,输入数据并输出。#include#includestdio.h

17、stdio.h structstructaddress_listaddress_list/*/*在函数体外定义在函数体外定义在函数体外定义在函数体外定义全局全局全局全局结构体类型结构体类型结构体类型结构体类型*/charname10;charname10;/*/*该类型的作用域为本程序内该类型的作用域为本程序内该类型的作用域为本程序内该类型的作用域为本程序内*/intintage;age;chartel10;chartel10;charaddress40;charaddress40;/*/*可在此定义结构体可在此定义结构体可在此定义结构体可在此定义结构体全局全局全局全局变量变量变量变量*/ma

18、in()main()structstructaddress_listaddress_lists;s;/*/*定义结构体定义结构体定义结构体定义结构体局部局部局部局部变量变量变量变量s s,占,占,占,占6262字节内存字节内存字节内存字节内存*/printf(nprintf(ninputname:);gets(s.name)inputname:);gets(s.name);printf(inputprintf(inputage:);age:);scanf(%dscanf(%d,&s.age);,&s.age);getchargetchar();();printf(inputprintf(inp

19、ut teltel:);:);gets(s.telgets(s.tel););printf(inputprintf(inputaddress:);gets(s.address);address:);gets(s.address);printf(nameprintf(nameageagetelteladdressn);addressn);printf(%5s%6d%10s%-40sn,s.name,s.age,printf(%5s%6d%10s%-40sn,s.name,s.age,s.tels.tel,s.address);,s.address);例例结构体的嵌套定义结构体的嵌套定义增加一个出

20、生日期:定义为含有年、月、日的结构体类型,增加一个出生日期:定义为含有年、月、日的结构体类型,增加一个出生日期:定义为含有年、月、日的结构体类型,增加一个出生日期:定义为含有年、月、日的结构体类型,然后嵌入然后嵌入然后嵌入然后嵌入structstruct student_1中(嵌套定义)。中(嵌套定义)。中(嵌套定义)。中(嵌套定义)。定义后嵌入定义后嵌入定义后嵌入定义后嵌入(常用方式常用方式常用方式常用方式):structstructdate_typedate_type intintyear;year;intintmonth;month;intintday;day;structstruct

21、student_1 intnum;charname20;charname20;charsex;charsex;intage;structstructdate_typedate_type birthdaybirthday;floatfloatscore;charaddr30;直接嵌套定义:直接嵌套定义:直接嵌套定义:直接嵌套定义:structstruct student_1 int num;charname20;charname20;charsex;charsex;int age;structstructdate_typedate_type intintyear;year;intintmonth

22、;month;intintday;day;birthdaybirthday;floatfloatscore;char addr30;numnamesexagescoreaddrbirthdaymonthdayyear四、结构体变量的初始化四、结构体变量的初始化结构体变量也可以在定义的同时初始化,结构体变量也可以在定义的同时初始化,各成员数据之间用各成员数据之间用各成员数据之间用各成员数据之间用逗号分开,并用逗号分开,并用逗号分开,并用逗号分开,并用括起来。括起来。括起来。括起来。例例例例 定义一结构体类型,包含工人的:编号、姓名、工资。定定义一结构体类型,包含工人的:编号、姓名、工资。定定义一

23、结构体类型,包含工人的:编号、姓名、工资。定定义一结构体类型,包含工人的:编号、姓名、工资。定义变量存放两人的数据,然后交换,输出交换前后的信息。义变量存放两人的数据,然后交换,输出交换前后的信息。义变量存放两人的数据,然后交换,输出交换前后的信息。义变量存放两人的数据,然后交换,输出交换前后的信息。#include#includestdio.hstdio.h main()main()structstructsalary_listsalary_listcharno10;charno10;charname30;charname30;floatsalary;floatsalary;z,x=10,l

24、iz,x=10,limingming,2000;,2000;/*/*结构体变量的初始化结构体变量的初始化结构体变量的初始化结构体变量的初始化*/structstructsalary_listsalary_list y=12,wangy=12,wangyanyan,2500,2500;printfprintf(nonamesalaryn);(nonamesalaryn);printf(x:%-5s%-9s%10.2fn,x.no,x.name,x.salary);printf(x:%-5s%-9s%10.2fn,x.no,x.name,x.salary);printf(y:%-5s%-9s%10

25、.2fn,y.no,y.name,y.salary);printf(y:%-5s%-9s%10.2fn,y.no,y.name,y.salary);z=x;x=y;y=z;z=x;x=y;y=z;/*/*交换两个结构体变量交换两个结构体变量交换两个结构体变量交换两个结构体变量*/printf(afterprintf(afterexchange:n);exchange:n);printf(x:%-5s%-9s%10.2fn,x.no,x.name,x.salary);printf(x:%-5s%-9s%10.2fn,x.no,x.name,x.salary);printf(y:%-5s%-9s%

26、10.2fn,y.no,y.name,y.salary);printf(y:%-5s%-9s%10.2fn,y.no,y.name,y.salary);注意:注意:注意:注意:同类型的结构体变量可以整体同类型的结构体变量可以整体同类型的结构体变量可以整体同类型的结构体变量可以整体赋值,即可以将一个结构体变量整体赋值,即可以将一个结构体变量整体赋值,即可以将一个结构体变量整体赋值,即可以将一个结构体变量整体赋给相同类型的另一个结构体变量。赋给相同类型的另一个结构体变量。赋给相同类型的另一个结构体变量。赋给相同类型的另一个结构体变量。说明说明:先定义结构体类型,后定义结构体变量。先定义结构体类型,

27、后定义结构体变量。先定义结构体类型,后定义结构体变量。先定义结构体类型,后定义结构体变量。注意区分定义类型注意区分定义类型和定义变量两个不同的概念。和定义变量两个不同的概念。结构体成员单独引用时相当于普通变量;成员名可以与程序结构体成员单独引用时相当于普通变量;成员名可以与程序中其他变量名相同,互不影响。中其他变量名相同,互不影响。当成员是另一个结构体变量时,应一级一级地引用。当成员是另一个结构体变量时,应一级一级地引用。如:如:student1.birthday.month;除了初始化,对结构体变量的赋值、输入、输出操作时,需除了初始化,对结构体变量的赋值、输入、输出操作时,需除了初始化,对

28、结构体变量的赋值、输入、输出操作时,需除了初始化,对结构体变量的赋值、输入、输出操作时,需分别访问各个成员,不能整体赋值或输入输出。分别访问各个成员,不能整体赋值或输入输出。分别访问各个成员,不能整体赋值或输入输出。分别访问各个成员,不能整体赋值或输入输出。如:如:如:如:printf(%s%c%d%s%fprintf(%s%c%d%s%f,p);,p);错!错!错!错!p=p=wangwang li li,f,30,middle,1600;,f,30,middle,1600;错!错!错!错!仅在以下情况,可把结构体变量作为一个整体访问仅在以下情况,可把结构体变量作为一个整体访问:(1)初始化

29、:)初始化:structstudents1=20001,liming,;(2)结构体变量之间整体赋值。如:结构体变量之间整体赋值。如:p2=p1;(3)取结构体变量地址:取结构体变量地址:printf(%x,&p);输出输出p的地址的地址 structstructteacherteacher*f=&p;f是是指向结构体变量的指针指向结构体变量的指针(4)结构体变量做函数参数。)结构体变量做函数参数。例例例例10.110.1分析程序分析程序分析程序分析程序#include#include#pragmapragmapack(1)pack(1)/*C+/*C+按成员实际大小分配内存按成员实际大小分配

30、内存按成员实际大小分配内存按成员实际大小分配内存不对齐不对齐不对齐不对齐*/main()main()structstructSampleSampleshortshortintintn;n;charc10;charc10;floatf;floatf;s;s;printf(%d,%d,%dnprintf(%d,%d,%dn,sizeof(s.nsizeof(s.n),),sizeof(s.csizeof(s.c),),sizeof(s.fsizeof(s.f););printf(%dnprintf(%dn,sizeof(ssizeof(s););C+结构体的成员函数结构体的成员函数C+结构体内可以

31、定义成员函数结构体内可以定义成员函数v成员函数可直接操作结构体的成员成员函数可直接操作结构体的成员相当于全局变量。相当于全局变量。v成员函数可以定义自己的局部变量成员函数可以定义自己的局部变量(包括形式参数包括形式参数),只在函数,只在函数内有效。内有效。v成员函数只属于结构体变量成员函数只属于结构体变量必须通过结构体变量调用必须通过结构体变量调用。v每个结构体变量都有只属于自己的成员和成员函数。每个结构体变量都有只属于自己的成员和成员函数。structstudentintnum;/*学号学号*/charname20;/*姓名姓名*/floatscore4;/*成绩数组成绩数组*/intget

32、Num()returnnum;/*得到学号成员函数得到学号成员函数*/char*getName()returnname;/*得到姓名成员函数得到姓名成员函数*/voidsetName(char*n)strcpy(name,n);/*修改姓名修改姓名*/floatgetAverScore()/*得到平均成绩得到平均成绩*/inti;floats=0;for(i=0;i4;i+)s+=scorei;returns/4;例例例例 结构体成员函数结构体成员函数结构体成员函数结构体成员函数#include#includestdio.hstdio.h#includestring.h#includestri

33、ng.hstructstudentintnum;/*学号学号*/charname20;/*姓名姓名*/floatscore4;/*成绩数组成绩数组*/intgetNum()returnnum;/*得到学号成员函数得到学号成员函数*/char*getName()returnname;/*得到姓名成员函数得到姓名成员函数*/voidsetName(char*n)strcpy(name,n);/*修改姓名修改姓名*/floatgetAverScore()/*得到平均成绩得到平均成绩*/inti;floats=0;for(i=0;i4;i+)s+=scorei;returns/4;voidmain()

34、voidmain()structstudentx1=2001,zhanghua,75,86,93,88,x2=2002,wangli,72,80,85,90;printf(%dprintf(%d:%-10s,v=%fn,x1.:%-10s,v=%fn,x1.getNum(),x1.getName(),x1.getAverScore(););printf(%dprintf(%d:%-10s,v=%fn,x2.:%-10s,v=%fn,x2.getNum(),x2.getName(),x2.getAverScore(););x1.x1.setName(liuhua);printf(%dprintf

35、(%d:%-10s,v=%fn,x1.:%-10s,v=%fn,x1.getNum(),x1.getName(),x1.getAverScore(););structstudentintnum;charname20,sex;intage;floatscore;charaddr30;stu3;10.2结构体数组结构体数组一、结构体数组的定义一、结构体数组的定义结构体数组用于保存一批同类型的结构体数据。每个数组结构体数组用于保存一批同类型的结构体数据。每个数组结构体数组用于保存一批同类型的结构体数据。每个数组结构体数组用于保存一批同类型的结构体数据。每个数组元素都是一个结构体变量。如:元素都是一个

36、结构体变量。如:元素都是一个结构体变量。如:元素都是一个结构体变量。如:定义结构体数组也有三种方式:定义结构体数组也有三种方式:1、先定义结构体,再单独定义数组、先定义结构体,再单独定义数组2、定义结构体类型的同时定义结构、定义结构体类型的同时定义结构体数组体数组3、直接定义结构体数组、直接定义结构体数组二、结构体数组的初始化二、结构体数组的初始化structstudentintnum;charname20;charsex;intage;floatscore;charaddr30;stu3=101,LiLin,M,18,87.5,103BejingRoad,102,ZhangFun,M,19,

37、99,130ShahaiRoad,103,WangMin,F,20,78.5,10ZhongshanRoad;说明:说明:说明:说明:结构体数组初始化时如果有未提供的数据则每个数组元素结构体数组初始化时如果有未提供的数据则每个数组元素结构体数组初始化时如果有未提供的数据则每个数组元素结构体数组初始化时如果有未提供的数据则每个数组元素必须单独必须单独必须单独必须单独用用用用括起来括起来括起来括起来数据个数足够时内数据个数足够时内数据个数足够时内数据个数足够时内可以省略。可以省略。可以省略。可以省略。对数组元素每个成员的访问,同结构体变量成员的访问。对数组元素每个成员的访问,同结构体变量成员的访问

38、。对数组元素每个成员的访问,同结构体变量成员的访问。对数组元素每个成员的访问,同结构体变量成员的访问。结构体变量、数组的初始化只适用于全局或静态结构体变量、数组的初始化只适用于全局或静态结构体变量、数组的初始化只适用于全局或静态结构体变量、数组的初始化只适用于全局或静态mianmian的。的。的。的。例例例例10.310.3编写程序编写程序编写程序编写程序n n个个个个小孩围成一圈小孩围成一圈小孩围成一圈小孩围成一圈(n=110)(n=110),开始指定第开始指定第开始指定第开始指定第s s个个个个小孩出列,从小孩出列,从小孩出列,从小孩出列,从下一个报数,再数到第下一个报数,再数到第下一个报

39、数,再数到第下一个报数,再数到第mm个小孩出列,依次重复直到全部出列。个小孩出列,依次重复直到全部出列。个小孩出列,依次重复直到全部出列。个小孩出列,依次重复直到全部出列。设计一个结构体类型存放一个小孩的姓名和下一个小孩的编号设计一个结构体类型存放一个小孩的姓名和下一个小孩的编号设计一个结构体类型存放一个小孩的姓名和下一个小孩的编号设计一个结构体类型存放一个小孩的姓名和下一个小孩的编号类似链表,再定义结构体数组保存类似链表,再定义结构体数组保存类似链表,再定义结构体数组保存类似链表,再定义结构体数组保存n n个个个个小孩的数据:小孩的数据:小孩的数据:小孩的数据:#include#includ

40、e#defineN10#defineN10structstructchildchild/*/*全局结构体类型全局结构体类型全局结构体类型全局结构体类型*/charname10;charname10;/*/*小孩的姓名小孩的姓名小孩的姓名小孩的姓名*/intint nextpnextp;/*/*下一个小孩的编号下一个小孩的编号下一个小孩的编号下一个小孩的编号(下标下标下标下标)*/)*/;main()main()intints,m,s,m,n=10,n=10,i,pre,k,counti,pre,k,count=0=0;structstructchildchildlinklinkN+1N+1=,

41、0,0,Ch1,2,Ch2,3,Ch3,4,Ch4,Ch1,2,Ch2,3,Ch3,4,Ch4,5,Ch5,6,Ch6,7,Ch7,8,Ch8,9,Ch9,10,Ch10,1;5,Ch5,6,Ch6,7,Ch7,8,Ch8,9,Ch9,10,Ch10,1;Ch12Ch23Chs-1sChss+1Chs+1Ch101kpre 例例例例10.310.3编写程序编写程序编写程序编写程序 printf(sprintf(s,m:);,m:);scanf(%d%dscanf(%d%d,&s,&m);,&s,&m);k=s;k=s;/*k/*k为出列小孩的下标为出列小孩的下标为出列小孩的下标为出列小孩的下标

42、直接用直接用直接用直接用s*/s*/if(k=1)pre=N;if(k=1)pre=N;/*pre/*pre为为为为出列小孩前一个小孩的下标出列小孩前一个小孩的下标出列小孩前一个小孩的下标出列小孩前一个小孩的下标*/elsepre=k-1;elsepre=k-1;printfprintf(出列顺序出列顺序出列顺序出列顺序:);:);while(countwhile(count N)N)printf(%sprintf(%s,linkk.name);/*,linkk.name);/*输出出列的小孩输出出列的小孩输出出列的小孩输出出列的小孩*/linkpre.nextplinkpre.nextp=l

43、inkk.nextplinkk.nextp;/*;/*从队列中删除从队列中删除从队列中删除从队列中删除*/k=k=linkk.nextplinkk.nextp;/*k/*k指向指向指向指向下个小孩的下标下个小孩的下标下个小孩的下标下个小孩的下标*/count+;count+;/*/*出列数增出列数增出列数增出列数增1*/1*/i=1;i=1;/*/*for(i=1;i=m;i+)for(i=1;i=m;i+)*/*/while(iwhile(i real,p-image);,p-real,p-image);/*/*通过通过通过通过p p访问访问访问访问x*/x*/运行结果:运行结果:运行结果:

44、运行结果:2+3i2+3i2+3i2+3i用用指向结构体的指针变量指向结构体的指针变量指向结构体的指针变量指向结构体的指针变量访问结构体变量的访问结构体变量的成员成员成员成员:1、用指向运算符、用指向运算符引用结构体变量中的成员引用结构体变量中的成员数据数据。指针变量名指针变量名指针变量名指针变量名-成员名成员名成员名成员名 如如:p-num 表示表示指针指针指针指针p所所指向的结构体变量的数据成员指向的结构体变量的数据成员指向的结构体变量的数据成员指向的结构体变量的数据成员num。2、用分量用分量(成员成员)运算符:运算符:(*p).num(很少使用很少使用)等价于等价于p-num。三、指向

45、结构体数组的指针三、指向结构体数组的指针structstudentstu3;structstudent*p=stu;或:或:structstudentstu3,*p=&stu0;使使p指向结构体数组的首地址,即结构体变量指向结构体数组的首地址,即结构体变量stu0的起始地址:的起始地址:p-num;p-num;/*/*引用引用引用引用stu0.num*/stu0.num*/p+;p+;p-p-nanenane;/*/*引用引用引用引用stu1.name*/stu1.name*/p+;p+;p-age;p-age;/*/*引用引用引用引用stu2.age*/stu2.age*/例例例例 使用指向

46、结构体数组元素的指针使用指向结构体数组元素的指针使用指向结构体数组元素的指针使用指向结构体数组元素的指针引用数组元素:输入输出引用数组元素:输入输出引用数组元素:输入输出引用数组元素:输入输出N N个复数。个复数。个复数。个复数。#define#defineCOMPCOMP structstructcomplexcomplexCOMPCOMPintintreal;real;intintimage;image;main()main()COMPss3,*COMPss3,*p p;intinti;i;printf(inputprintf(input3complex:n);3complex:n);fo

47、r(i=0;i3;i+)for(i=0;i3;i+)scanf(%d%dscanf(%d%d,&,&ssi.realssi.real,&,&ssi.imagessi.image);for(for(p p=ssss;p pss+3;real,-real,p p-image);-image);numnamesexagenumnamesexagestu0stu1stu2stustup+p+pnumnamesexagenumnamesexage 例例例例10.410.4分析程序分析程序分析程序分析程序#include#include main()main()intinti;i;structstruct

48、countrycountry intintnum;num;charname20;charname20;x5=1,China,2,USA,3,France,4,England,x5=1,China,2,USA,3,France,4,England,5,Russian,*5,Russian,*pcpc;pc=x;pc=x;for(for(i i=0;i5;i+)=0;inum,(pc+i)-name0);)-num,(pc+i)-name0);例例例例10.510.5编写程序编写程序编写程序编写程序#include#include#include#includemain()main()struct

49、structpersonperson intintno;no;charname10;charname10;structstructperson*pp,p5=1,person*pp,p5=1,李明李明李明李明,2,2,王华王华王华王华,3,3,张斌张斌张斌张斌,4,4,刘丽刘丽刘丽刘丽,5,5,陈涛陈涛陈涛陈涛;printfprintf(学号学号学号学号t t姓名姓名姓名姓名n);n);for(for(pppp=p;ppp+5;pp+)=p;ppno,pp-name);-no,pp-name);四、结构体类型作函数的参数四、结构体类型作函数的参数1、结构体变量的、结构体变量的成员成员作函数的参数

50、作函数的参数(实参实参)单个值传递:单个值传递:与普通变量作函数参数相同,即与普通变量作函数参数相同,即“值传递值传递”,形参必须是,形参必须是同类型的同类型的普通普通变量,形参变化不改变结构体变量该成员的值。变量,形参变化不改变结构体变量该成员的值。如定义函数:如定义函数:void fun(int s,char x);函数的调用:函数的调用:fun(stu.num,stu.name);2、结构体变量作函数的参数、结构体变量作函数的参数整体值传递整体值传递:实参和形参必须是相同结构体类型的变量,调用函数时形实参和形参必须是相同结构体类型的变量,调用函数时形参临时分配内存,实参变量将参临时分配内

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com