C语言程序设计第十一章结构体与共用体.ppt
《C语言程序设计第十一章结构体与共用体.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计第十一章结构体与共用体.ppt(47页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、主讲教师:李艺主讲教师:李艺C语言程序设计第十一章结构体与共用体主要内容主要内容11.1 11.1 结构体类型概述结构体类型概述结构体类型概述结构体类型概述11.2 11.2 结构体类型变量的定义与使用结构体类型变量的定义与使用结构体类型变量的定义与使用结构体类型变量的定义与使用11.3 11.3 结构体数组结构体数组结构体数组结构体数组11.4 11.4 结构体变量作为函数参数及返回值结构体变量作为函数参数及返回值结构体变量作为函数参数及返回值结构体变量作为函数参数及返回值11.5 11.5 结构体变量与指针结构体变量与指针结构体变量与指针结构体变量与指针11.6 11.6 结构体指针与链表
2、结构体指针与链表结构体指针与链表结构体指针与链表11.7 11.7 共用体类型的数据共用体类型的数据共用体类型的数据共用体类型的数据11.8 11.8 枚举类型的数据枚举类型的数据枚举类型的数据枚举类型的数据11.9 11.9 用用用用TYPEDEFTYPEDEF定义类型定义类型定义类型定义类型211.1 结构体类型概述使用数组可以将多个相关的数据作为一个整体来处理,十分方使用数组可以将多个相关的数据作为一个整体来处理,十分方使用数组可以将多个相关的数据作为一个整体来处理,十分方使用数组可以将多个相关的数据作为一个整体来处理,十分方便。但数组只能是相同类型数据的集合,而现实生活中存在大量的要便
3、。但数组只能是相同类型数据的集合,而现实生活中存在大量的要便。但数组只能是相同类型数据的集合,而现实生活中存在大量的要便。但数组只能是相同类型数据的集合,而现实生活中存在大量的要作为一个整体来处理,数据类型却不相同的数据。请看:作为一个整体来处理,数据类型却不相同的数据。请看:作为一个整体来处理,数据类型却不相同的数据。请看:作为一个整体来处理,数据类型却不相同的数据。请看:姓名姓名姓名姓名年龄年龄年龄年龄性别性别性别性别民族民族民族民族住址住址住址住址电话号码电话号码电话号码电话号码字符数组字符数组字符数组字符数组整型整型整型整型字符字符字符字符字符字符字符字符字符数组字符数组字符数组字符数
4、组长整型长整型长整型长整型v许多高级语言提供记录许多高级语言提供记录(record)(record)类型的数据类型的数据v在在C C语言中称为结构体语言中称为结构体(structstruct)类型类型311.1 结构体类型概述pp结构体类型是构造型数据结构结构体类型是构造型数据结构结构体类型是构造型数据结构结构体类型是构造型数据结构pp作为一个整体来处理多个相关,作为一个整体来处理多个相关,作为一个整体来处理多个相关,作为一个整体来处理多个相关,但数据类型不同的数据但数据类型不同的数据但数据类型不同的数据但数据类型不同的数据pp类型标识符由两个单词组成:类型标识符由两个单词组成:类型标识符由两
5、个单词组成:类型标识符由两个单词组成:structstruct 结构体名结构体名结构体名结构体名pp例如右边代码:例如右边代码:例如右边代码:例如右边代码:struct person char name10;int age;char sex;long num;char nation;char address20;long tel;411.1 结构体类型概述pp结构体类型的定义结构体类型的定义结构体类型的定义结构体类型的定义structstruct 结构体名结构体名结构体名结构体名 成员项表列成员项表列成员项表列成员项表列 ;struct person char name10;int age;c
6、har sex;long num;char nation;char address20;long tel;v注意不要忘记花扩号外的分号511.1 结构体类型概述pp结构体类型的特点结构体类型的特点结构体类型的特点结构体类型的特点n n结构体由若干个数据项组成,每一个数据项称为结构体的结构体由若干个数据项组成,每一个数据项称为结构体的结构体由若干个数据项组成,每一个数据项称为结构体的结构体由若干个数据项组成,每一个数据项称为结构体的成成成成员员员员,或,或,或,或“域域域域”。每一个数据项都属于一种数据类型。每一个数据项都属于一种数据类型。每一个数据项都属于一种数据类型。每一个数据项都属于一种数
7、据类型。n n结构体类型是一个抽象的类型,它只表示了结构体类型是一个抽象的类型,它只表示了结构体类型是一个抽象的类型,它只表示了结构体类型是一个抽象的类型,它只表示了“由若干个不同由若干个不同由若干个不同由若干个不同类型数据项组成的复合类型类型数据项组成的复合类型类型数据项组成的复合类型类型数据项组成的复合类型”,结构体类型可以有,结构体类型可以有,结构体类型可以有,结构体类型可以有无数多种无数多种无数多种无数多种。n n结构体类型由用户自己定义。结构体类型由用户自己定义。结构体类型由用户自己定义。结构体类型由用户自己定义。n n定义一个结构体类型只是表示这个类型的结构,定义一个结构体类型只是
8、表示这个类型的结构,定义一个结构体类型只是表示这个类型的结构,定义一个结构体类型只是表示这个类型的结构,不分配内存不分配内存不分配内存不分配内存单元。正如类型单元。正如类型单元。正如类型单元。正如类型intint,char.,char.611.2 结构体类型变量的定义与使用n n直接定义结构体变量直接定义结构体变量直接定义结构体变量直接定义结构体变量structstructstructstruct 成员列表成员列表成员列表成员列表 student,worker student,worker student,worker student,worker;struct char name10;int
9、 age;char sex;long num;char nation;char address20;long tel;student,worker;v这种形式只定义变量,没有定义类型711.2 结构体类型变量的定义与使用pp结构体变量的定义结构体变量的定义结构体变量的定义结构体变量的定义n n在定义一个结构体的同时在定义一个结构体的同时在定义一个结构体的同时在定义一个结构体的同时定义一个或若干个结构体定义一个或若干个结构体定义一个或若干个结构体定义一个或若干个结构体变量。变量。变量。变量。structstructstructstruct 结构体名结构体名结构体名结构体名 成员列表成员列表成员列
10、表成员列表 变量名列表;变量名列表;变量名列表;变量名列表;struct person char name10;int age;char sex;long num;char nation;char address20;long tel;student,worker;v在定义结构体类型的同在定义结构体类型的同时定义结构体变量变量时定义结构体变量变量811.2 结构体类型变量的定义与使用n n结构体类型定义好后,再结构体变量定义结构体类型定义好后,再结构体变量定义结构体类型定义好后,再结构体变量定义结构体类型定义好后,再结构体变量定义在定义了结构体类型之后,把变量定义为该类型在定义了结构体类型之后
11、,把变量定义为该类型在定义了结构体类型之后,把变量定义为该类型在定义了结构体类型之后,把变量定义为该类型structstruct person person student,workerstudent,worker;类似于类似于类似于类似于 intint a ,b;a ,b;结构体变量名结构体变量名911.2 结构体类型变量的定义与使用pp结构体类型的嵌掏定义结构体类型的嵌掏定义结构体类型的嵌掏定义结构体类型的嵌掏定义可以用已定义的另一个可以用已定义的另一个可以用已定义的另一个可以用已定义的另一个结构体类型来定义其成员的结构体类型来定义其成员的结构体类型来定义其成员的结构体类型来定义其成员的类
12、型类型类型类型 (结构体嵌套)结构体嵌套)结构体嵌套)结构体嵌套)struct date int month;int day;int year;struct char name10;struct date birthday;char sex;long num;char nation;char address20;long tel;student,worker;1011.2 结构体类型变量的定义与使用pp定义了变量定义了变量定义了变量定义了变量 student student 和和和和 worker worker 为为为为 struetstruet person person 类型后,它们就具类
13、型后,它们就具类型后,它们就具类型后,它们就具有有有有structstruct person person 结构体类型的特征。也就是说,变量结构体类型的特征。也就是说,变量结构体类型的特征。也就是说,变量结构体类型的特征。也就是说,变量studentstudent不是不是不是不是一个简单变量,它的值也不是一个简单的整数、实数或字符等,而是一个简单变量,它的值也不是一个简单的整数、实数或字符等,而是一个简单变量,它的值也不是一个简单的整数、实数或字符等,而是一个简单变量,它的值也不是一个简单的整数、实数或字符等,而是由许多个基本数据组成的复合的值。由许多个基本数据组成的复合的值。由许多个基本数据
14、组成的复合的值。由许多个基本数据组成的复合的值。pp可以用可以用可以用可以用 sizeofsizeof 运算符测出一个结构体类型数据的长度,运算符测出一个结构体类型数据的长度,运算符测出一个结构体类型数据的长度,运算符测出一个结构体类型数据的长度,sizeofsizeof 后面后面后面后面括弧内可以写类型名也可以变量名。括弧内可以写类型名也可以变量名。括弧内可以写类型名也可以变量名。括弧内可以写类型名也可以变量名。可用可用可用可用 printfprintf 函数输出它的值:函数输出它的值:函数输出它的值:函数输出它的值:printf(“dn”,sizeof(struct person);pri
15、ntf(“dn”,sizeof(student);1111.2 结构体类型变量的定义与使用pp结构体类型变量的初始化结构体类型变量的初始化结构体类型变量的初始化结构体类型变量的初始化可以在任一种定义结构类型变量的同时给结构类型变量赋初值。可以在任一种定义结构类型变量的同时给结构类型变量赋初值。可以在任一种定义结构类型变量的同时给结构类型变量赋初值。可以在任一种定义结构类型变量的同时给结构类型变量赋初值。在初始化时,按照所定义的结构体类型的数据结构,依次写出各初始在初始化时,按照所定义的结构体类型的数据结构,依次写出各初始在初始化时,按照所定义的结构体类型的数据结构,依次写出各初始在初始化时,按
16、照所定义的结构体类型的数据结构,依次写出各初始值,编译时就将它们赋给此变量中各成员。值,编译时就将它们赋给此变量中各成员。值,编译时就将它们赋给此变量中各成员。值,编译时就将它们赋给此变量中各成员。structstruct person student=person student=“wangwang Li”,12,15,1974,M,10189341101,H,Li”,12,15,1974,M,10189341101,H,“135 Beijing Road”,3601234;“135 Beijing Road”,3601234;1211.2 结构体类型变量的定义与使用struct perso
17、n char name10;int age;char sex;long num;char nation;char address20;long tel;student=Wang Li,21,M,10189341101,H,“96 Jinzhai Road”,3601234;1311.2 结构体类型变量的定义与使用pp结构体类型变量的初始化结构体类型变量的初始化结构体类型变量的初始化结构体类型变量的初始化如果一个结构体类型内又嵌套另一个结构体类型,则初始化时如果一个结构体类型内又嵌套另一个结构体类型,则初始化时如果一个结构体类型内又嵌套另一个结构体类型,则初始化时如果一个结构体类型内又嵌套另一个
18、结构体类型,则初始化时仍然是对各个基本类型的成员给予初值。仍然是对各个基本类型的成员给予初值。仍然是对各个基本类型的成员给予初值。仍然是对各个基本类型的成员给予初值。struct person student=wang Li,12,15,1974,M,10189341101,H,96 Jinzhai Road,209887;姓名姓名Name20生日生日Birthday性别性别Sex学号学号num民族民族nation地址地址address电话电话Tel月月month日日Day年年Year1411.2 结构体类型变量的定义与使用pp 结构体变量的使用结构体变量的使用结构体变量的使用结构体变量的使用
19、 使用结构体变量中的一个成员使用结构体变量中的一个成员使用结构体变量中的一个成员使用结构体变量中的一个成员结构体变量名结构体变量名结构体变量名结构体变量名.成员名成员名成员名成员名 例例例例:student.num:student.num student.num+100 student.num+100 相当于相当于相当于相当于 (student.num)+100(student.num)+100成员运算符级别最高成员运算符级别最高1511.2 结构体类型变量的定义与使用pp嵌套的结构体类型采用逐级访问的方法嵌套的结构体类型采用逐级访问的方法嵌套的结构体类型采用逐级访问的方法嵌套的结构体类型采用
20、逐级访问的方法 student.birthday.monthstudent.birthday.month;pp可以对结构体变量的成员进行有关的运算:算术、赋值、关系、逻可以对结构体变量的成员进行有关的运算:算术、赋值、关系、逻可以对结构体变量的成员进行有关的运算:算术、赋值、关系、逻可以对结构体变量的成员进行有关的运算:算术、赋值、关系、逻辑运算等。例:辑运算等。例:辑运算等。例:辑运算等。例:student.num+student.num+(自加)自加)自加)自加)&student.num&student.num (取地址)(取地址)(取地址)(取地址)pp相同结构的结构体变量可以互相赋值相
21、同结构的结构体变量可以互相赋值相同结构的结构体变量可以互相赋值相同结构的结构体变量可以互相赋值 structstruct stud_typestud_type student1=“Wang Li”student1=“Wang Li”,18,M,89101,89.5;,18,M,89101,89.5;structstruct stud_typestud_type student2;student2;student2=student1;student2=student1;pp内嵌的结构体变量可以赋给另一个结构体变量内嵌的结构体变量可以赋给另一个结构体变量内嵌的结构体变量可以赋给另一个结构体变量内嵌
22、的结构体变量可以赋给另一个结构体变量 student2.birthday=student1.birthday;student2.birthday=student1.birthday;16pp 应分别赋给结构体变量各成员应分别赋给结构体变量各成员应分别赋给结构体变量各成员应分别赋给结构体变量各成员S2.birthday.year =1973;S2.birthday.month=3;S2.birthday.day =20;pp 不允许将一组常量直接赋给结构体变量不允许将一组常量直接赋给结构体变量不允许将一组常量直接赋给结构体变量不允许将一组常量直接赋给结构体变量 S2.birthday=3,20,
23、1973;11.2 结构体类型变量的定义与使用17pp若在同一函数中有与结构成员同名的变量,它将在内存中另外分配存若在同一函数中有与结构成员同名的变量,它将在内存中另外分配存若在同一函数中有与结构成员同名的变量,它将在内存中另外分配存若在同一函数中有与结构成员同名的变量,它将在内存中另外分配存储单元,而不在结构变量范围内分配储单元,而不在结构变量范围内分配储单元,而不在结构变量范围内分配储单元,而不在结构变量范围内分配student.num (student.num (结构体变量中的结构体变量中的结构体变量中的结构体变量中的num)num)numnum (简单变量简单变量简单变量简单变量num
24、)num)pp同一结构类型的不同变量的同一成员,代表内存中不同的存储单元,同一结构类型的不同变量的同一成员,代表内存中不同的存储单元,同一结构类型的不同变量的同一成员,代表内存中不同的存储单元,同一结构类型的不同变量的同一成员,代表内存中不同的存储单元,它们有不同的值,应该分别引用:它们有不同的值,应该分别引用:它们有不同的值,应该分别引用:它们有不同的值,应该分别引用:11.2 结构体类型变量的定义与使用void main()struct person long num;struct person student,worker int num;printf(num=%d,num);print
25、f(student.num=%ld,student.num);printf(worker.num=%ld,worker.num);studentvName20vAgevSexvNumworkervName20vAgevSexvNumvnum1811.2 结构体类型变量的定义与使用pp结构体的输入和输出结构体的输入和输出结构体的输入和输出结构体的输入和输出n n不允许将结构体变量作为一个整体进行输入和输出。如:不允许将结构体变量作为一个整体进行输入和输出。如:不允许将结构体变量作为一个整体进行输入和输出。如:不允许将结构体变量作为一个整体进行输入和输出。如:printf(%dn,student)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 第十一 结构 共用
限制150内