C语言第11章.ppt
《C语言第11章.ppt》由会员分享,可在线阅读,更多相关《C语言第11章.ppt(68页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第11章 结构体与共用体 C C语言程序设计语言程序设计 第十一章第十一章 结构体与共用体结构体与共用体概述定义结构体类型变量的方法结构体变量的引用结构体变量的初始化结构体数组指向结构体类型数据的指针用指针处理链表共用体枚举类型用typedef定义类型本章学习目标本章学习目标理解结构体的概念和它对于编程的重要性;理解结构体的概念和它对于编程的重要性;理解理解定义结构体类型定义结构体类型和和定义结构体变量定义结构体变量的区别;的区别;能够用能够用“.”和和“-”分量运算符操作结构体变分量运算符操作结构体变量和指向结构体的指针变量;量和指向结构体的指针变量;能够定义并使用结构体数组;能够定义并使用
2、结构体数组;了解共用体数据类型了解共用体数据类型;自学了解枚举类型的使用;自学了解枚举类型的使用;了解用了解用typedef定义数据类型。定义数据类型。C C语言程序设计语言程序设计 第十一章第十一章 结构体与共用体结构体与共用体11.1 概述概述v数据的基本类型:整、实、字符。数据的基本类型:整、实、字符。v数组是构造类型:每个元素为同一类型数组是构造类型:每个元素为同一类型v有些问题仅用基本类型和数组来描述,无法反映有些问题仅用基本类型和数组来描述,无法反映其内在联系,如学生情况:其内在联系,如学生情况:numnamesexagescoreaddr整字符串字符整实字符串11001Zhang
3、 xinm1996.5Shang hai12001Wang lif2098.5Bei jing上述数据互相独立又相互关联,如:均与学号和姓上述数据互相独立又相互关联,如:均与学号和姓名关联。需要将其组合成一个有机的整体,名关联。需要将其组合成一个有机的整体,C语言可以将语言可以将由不同类型数据组成的这种数据结构组织成一个组合项,由不同类型数据组成的这种数据结构组织成一个组合项,称为称为结构体结构体(structure)。)。C C语言程序设计语言程序设计 第十一章第十一章 结构体与共用体结构体与共用体结构体结构体v结构体是一种结构体是一种构造构造数据类型。数据类型。与其他高级语言中的与其他高级
4、语言中的“记录记录”类似。类似。v定义:由定义:由相互关联相互关联的的不同数据类型不同数据类型的数据组成的的数据组成的有机整体。有机整体。v用途:为处理复杂的数据结构提供了手段。用途:为处理复杂的数据结构提供了手段。为函数间传递不同类型的参数提供了便利。为函数间传递不同类型的参数提供了便利。v关键字:关键字:struct结构体类型定义结构体类型定义struct结构体名结构体名类型标识符类型标识符成员名成员名1;类型标识符类型标识符成员名成员名2;.;成员类型可以是成员类型可以是基本型或构造型基本型或构造型struct是是关键字关键字,不能省略不能省略合法标识符合法标识符可省可省:无名结构体无名
5、结构体;不能省略不能省略注意:这只是声明一种数注意:这只是声明一种数注意:这只是声明一种数注意:这只是声明一种数据类型并没有定义变量。据类型并没有定义变量。据类型并没有定义变量。据类型并没有定义变量。C C语言程序设计语言程序设计 第十一章第十一章 结构体与共用体结构体与共用体structstudentintnum;charname20;charsex;intage;floatscore;charaddr30;namenumsexagescoreaddr2字节字节2字节字节20字节字节1字节字节4字节字节30字节字节.结构体类型结构体类型定义定义仅描述结构体的组成仅描述结构体的组成,不分配内存
6、空间不分配内存空间 C C语言程序设计语言程序设计 第十一章第十一章 结构体与共用体结构体与共用体11.2 定义结构体类型变量的方法定义结构体类型变量的方法声明结构体类型时不分配存储单元,使用该类型定声明结构体类型时不分配存储单元,使用该类型定义变量时才分配存储单元。定义变量方法义变量时才分配存储单元。定义变量方法3种:种:先声明先声明结构体结构体类型类型,再定义再定义结构体结构体变量变量structstudentintnum;charname20;charsex;intage;floatscore;charaddr30;structstudentstu1,stu2;定义结构体定义结构体类型类
7、型定义结构体定义结构体变量变量真正可以使用的变量真正可以使用的变量struct结构体名结构体名类型标识符类型标识符成员名;成员名;类型标识符类型标识符成员名;成员名;.;struct结构体名结构体名变量名表列变量名表列;C C语言程序设计语言程序设计 第十一章第十一章 结构体与共用体结构体与共用体声明结构体声明结构体类型类型的的同时同时定义结构体定义结构体变量变量只有在定义了只有在定义了结构结构体变量体变量后系统才为后系统才为其其分配内存分配内存。structstudentintnum;charname20;charsex;intage;floatscore;charaddr30;stu1,s
8、tu2;定义结构体定义结构体类型类型定义结构体定义结构体变量变量struct结构体名结构体名类型标识符类型标识符成员名;成员名;类型标识符类型标识符成员名;成员名;.变量名表列变量名表列;C C语言程序设计语言程序设计 第十一章第十一章 结构体与共用体结构体与共用体直接定义结构体类型变量直接定义结构体类型变量用用无名结构体无名结构体直接直接定义变量定义变量只能一次只能一次struct类型标识符类型标识符成员名;成员名;类型标识符类型标识符成员名;成员名;.变量名表列变量名表列;structintnum;charname20;charsex;intage;floatscore;charaddr3
9、0;stu1,stu2;C C语言程序设计语言程序设计 第十一章第十一章 结构体与共用体结构体与共用体说明说明v结构体类型与结构体变量概念不同结构体类型与结构体变量概念不同l类型类型:不分配内存;不分配内存;变量变量:分配内存分配内存l类型类型:不能赋值、存取、运算不能赋值、存取、运算;变量变量:可以可以v结构体变量中的成员可单独使用,方法如普通变量;结构体变量中的成员可单独使用,方法如普通变量;v结构体可嵌套结构体可嵌套structdateintmonth;intday;intyear;structstudentintnum;charname20;structdatebirthday;stu
10、;numnamebirthdaymonthdayyearprintf(%d,sizeof(stu);structstudentintnum;charname20;structdateintmonth;intday;intyear;birthday;stu;结果:结果:28v结构体成员名与程序结构体成员名与程序中变量名可相同中变量名可相同 C C语言程序设计语言程序设计 第十一章第十一章 结构体与共用体结构体与共用体v结构体成员名与程序中变量名可相同,两者不代结构体成员名与程序中变量名可相同,两者不代表同一个对象。表同一个对象。structstudentintnum;charname20;flo
11、atscore;stu;intnum;stu.numnum C C语言程序设计语言程序设计 第十一章第十一章 结构体与共用体结构体与共用体11.3结构体变量的引用结构体变量的引用引用规则引用规则v结构体变量结构体变量不能整体引用不能整体引用,只能引用变量只能引用变量成员成员结构体变量名结构体变量名.成员名成员名成员成员(分量分量)运算符运算符优先级优先级:1结合性结合性:从左向右从左向右structstudentintnum;charname20;charsex;intage;floatscore;charaddr30;stu1,stu2;stu1.num=10;stu1.age+;stu1.
12、score=85.5;stu1.score+=stu2.score;C C语言程序设计语言程序设计 第十一章第十一章 结构体与共用体结构体与共用体main()structstudentintNo;floatscore;stu1,stu2;scanf(“%d,%f”,&stu1);()scanf(“%d,%f”,&stu1.No,&stu1.score);()printf(“%d,%f”,stu1);()printf(“%d,%f”,stu1.No,stu1.score);()stu2=stu1;()C C语言程序设计语言程序设计 第十一章第十一章 结构体与共用体结构体与共用体v结构体成员本身又
13、是一个结构体类型,则需要找结构体成员本身又是一个结构体类型,则需要找到最低一级的成员。到最低一级的成员。structstudentintnum;charname20;structdateintmonth;intday;intyear;birthday;stu1,stu2;numnamebirthdaymonthdayyearstu1.birthday.month=12;v结构体变量的成员与普通变量用法相同。结构体变量的成员与普通变量用法相同。C C语言程序设计语言程序设计 第十一章第十一章 结构体与共用体结构体与共用体11.4 结构体变量的初始化结构体变量的初始化形式一形式一struct结构体
14、名结构体名类型标识符类型标识符成员名成员名1;类型标识符类型标识符成员名成员名2;.;struct结构体名结构体名结构体变量结构体变量=初始数据初始数据;structstuintnum;charname20;intage;charaddr30;structstua=112,“WangLin”,19,“200BeijingRoad”;C C语言程序设计语言程序设计 第十一章第十一章 结构体与共用体结构体与共用体形式二形式二struct结构体名结构体名类型标识符类型标识符成员名成员名1;类型标识符类型标识符成员名成员名2;.结构体变量结构体变量=初始数据初始数据;structstuintnum;c
15、harname20;intage;charaddr30;a=112,“WangLin”,19,“200BeijingRoad”;C C语言程序设计语言程序设计 第十一章第十一章 结构体与共用体结构体与共用体形式三形式三struct类型标识符类型标识符成员名;成员名;类型标识符类型标识符成员名;成员名;.结构体变量结构体变量=初始数据初始数据;structintnum;charname20;charsex;intage;charaddr30;stu1=112,“WangLin”,M,19,“200BeijingRoad”;C C语言程序设计语言程序设计 第十一章第十一章 结构体与共用体结构体与共
16、用体#includevoidmain()structstudentlongintnum;charname20;charsex;charaddr20;a=89031,“LiLin”,M,“123BeijingRoad”;printf(No.:%ldnname:%snsex:%cnaddress:%sn,a.num,a.name,a.sex,a.addr);例例11.1对结构体变量初始化对结构体变量初始化运行结果:运行结果:No.:89301name:LiLinsex:Maddress:123BeijingRoad C C语言程序设计语言程序设计 第十一章第十一章 结构体与共用体结构体与共用体11
17、.5 结构体数组结构体数组具有相同结构的结构体也可以组成数组具有相同结构的结构体也可以组成数组定义结构体数组:定义结构体数组:3种形式种形式形式一形式一:间接定义间接定义structstudentintnum;charname20;charsex;intage;structstudentstu2;numnamesexagenumnamesexagestu0stu125B形式二形式二:直接定义直接定义structstudentintnum;charname20;charsex;intage;stu2;形式三形式三:直接定义直接定义structintnum;charname20;charsex;i
18、ntage;stu2;C C语言程序设计语言程序设计 第十一章第十一章 结构体与共用体结构体与共用体结构体数组初始化结构体数组初始化struct结构名结构名结构数组名结构数组名数组长度数组长度=初始数据初始数据;定义数组时初始化定义数组时初始化:structstudentintnum;charname20;charsex;intage;structstudentstu3=100,“WangLin”,M,20,101,“LiGang”,M,19,110,“LiuYan”,F,19;全部初始化时维数可省全部初始化时维数可省按顺序定义时:按顺序定义时:内层括号内层括号可以省略可以省略声明结构体时,对
19、结构体数组初始化声明结构体时,对结构体数组初始化:structstudentintnum;charname20;charsex;intage;stu3=100,“WangLin”,M,20,101,“LiGang”,M,19,110,“LiuYan”,F,19;全部初始化时维数可省全部初始化时维数可省按顺序定义时:按顺序定义时:内层括号内层括号可以省略可以省略 C C语言程序设计语言程序设计 第十一章第十一章 结构体与共用体结构体与共用体结构体数组应用结构体数组应用structstudentintnum;charname20;charsex;intage;structstudentstu=10
20、0,“WangLin”,M,20,;stu0.age+;strcpy(stu0.name,“ZhaoDa”);C C语言程序设计语言程序设计 第十一章第十一章 结构体与共用体结构体与共用体#include#includestructpersoncharname20;intcount;leader3=“Li”,0,“Zhang”,0,”Wang“,0;voidmain()inti,j;charleader_name20;for(i=1;i=10;i+)scanf(%s,leader_name);for(j=0;j3;j+)if(strcmp(leader_name,leaderj.name)=0
21、)leaderj.count+;printf(n);for(i=0;i3;i+)printf(%5s:%dn,leaderi.name,leaderi.count);例例11.2统计候选人选票统计候选人选票全局结构体数组全局结构体数组“.”“.”成员运算符优先于成员运算符优先于“+”+”,所以,所以Leaderj.count+Leaderj.count+相当于相当于(learerj.count)+(learerj.count)+namecountLiZhangWang000namecountLiZhangWang433 C C语言程序设计语言程序设计 第十一章第十一章 结构体与共用体结构体与共
22、用体11.6 指向结构体类型数据的指针指向结构体类型数据的指针v存放结构体首地址存放结构体首地址v结构指针的运算按照结构指针的运算按照C语言的地址运算原则进行语言的地址运算原则进行.例如,结构指针加一将指向内存中下一个结构体。例如,结构指针加一将指向内存中下一个结构体。指向结构体变量的指针指向结构体变量的指针v定义形式:定义形式:struct结构体名结构体名*结构体指针名结构体指针名;例例structstudent*p;存放结构体变量在存放结构体变量在内存的起始地址内存的起始地址numnamesexagestupstructstudentintnum;charname20;charsex;in
23、tage;stu;structstudent*p=&stu;C C语言程序设计语言程序设计 第十一章第十一章 结构体与共用体结构体与共用体v使用结构体指针变量引用成员形式使用结构体指针变量引用成员形式例例intn;int*p=&n;*p=10;n=10structstudentstu1;structstudent*p=&stu1;stu1.num=101;(*p).num=101以下三种形式等价:以下三种形式等价:结构体变量名结构体变量名.成员名成员名stu.num=101(*结构体指针名结构体指针名).成员名成员名(*p).num=101结构体指针名结构体指针名成员名成员名pnum=101指
24、向运算符指向运算符优先级优先级:1结合方向:从左向右结合方向:从左向右()不能少!不能少!C C语言程序设计语言程序设计 第十一章第十一章 结构体与共用体结构体与共用体#include#includevoidmain()structstudentlongintnum;charname20;charsex;floatscore;stu_1,*p;p=&stu_1;stu_1.num=89101;strcpy(stu_1.name,LiLin);(*p).sex=M;pscore=89.5;printf(nNo:%ldnname:%snsex:%cnscore:%fn,(*p).num,pname
25、,stu_1.sex,pscore);例例11.3指向结构体变量的指针的应用指向结构体变量的指针的应用 C C语言程序设计语言程序设计 第十一章第十一章 结构体与共用体结构体与共用体v注意区分以下三种运算注意区分以下三种运算p np n+p nstructsintx;inty;data4=10,100,20,200,30,300,40,400;main()structs*pointer=data;printf(“%dn”,+pointerx);printf(“%dn”,(+pointer)y);printf(“%dn”,(pointer+)x);printf(“%dn”,pointery+);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 11
限制150内