C语言程序设计课件第5章自定义数据类型.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《C语言程序设计课件第5章自定义数据类型.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计课件第5章自定义数据类型.ppt(82页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第5章 自定义数据类型C+C+C+C+程序设计程序设计程序设计程序设计函数和编译预处理函数和编译预处理函数和编译预处理函数和编译预处理2 2C+C+C+C+程序设计程序设计程序设计程序设计-中南大学中南大学中南大学中南大学目目 录录u结构体类型结构体类型u共用体类型共用体类型u枚举类型枚举类型u类型定义类型定义C+C+C+C+程序设计程序设计程序设计程序设计函数和编译预处理函数和编译预处理函数和编译预处理函数和编译预处理3 3C+C+C+C+程序设计程序设计程序设计程序设计-中南大学中南大学中南大学中南大学3结构体类型结构体类型l结构体的概念结构体的概念l结构体类型的定义结构体类型的定义l结构
2、体变量的定义结构体变量的定义l结构体变量的初始化和引用结构体变量的初始化和引用l结构体数组结构体数组l结构体与函数结构体与函数l链表链表C+C+C+C+程序设计程序设计程序设计程序设计函数和编译预处理函数和编译预处理函数和编译预处理函数和编译预处理4 4C+C+C+C+程序设计程序设计程序设计程序设计-中南大学中南大学中南大学中南大学5.1.1 5.1.1 结构体的概念结构体的概念 一一个个学学生生的的信信息息有有学学号号、姓姓名名、性性别别、年年龄龄、住址住址、成绩成绩等。等。一一个个教教师师的的信信息息有有职职工工编编号号、姓姓名名、性性别别、年年龄龄、职称职称、工资工资等。等。如何描述这
3、些类型不同的相关数据?如何描述这些类型不同的相关数据?结构体结构体结构体结构体一种构造类型数据一种构造类型数据 结构体结构体由若干不同类型的数据项组成,由若干不同类型的数据项组成,构成结构体的各个数据项称为构成结构体的各个数据项称为结构体成员结构体成员。C+C+C+C+程序设计程序设计程序设计程序设计函数和编译预处理函数和编译预处理函数和编译预处理函数和编译预处理5 5C+C+C+C+程序设计程序设计程序设计程序设计-中南大学中南大学中南大学中南大学struct struct 结构体名结构体名 数据类型成员名数据类型成员名1 1;数据类型成员名数据类型成员名2 2;:数据类型成员名数据类型成员
4、名n n;在大括号中的内容也称为在大括号中的内容也称为“成员说明列表成员说明列表”。在结构体中包含若干个不同数据类型的在结构体中包含若干个不同数据类型的结构体结构体成员成员,从而使这些数据项组合起来反映某一个信息。,从而使这些数据项组合起来反映某一个信息。C+C+C+C+程序设计程序设计程序设计程序设计函数和编译预处理函数和编译预处理函数和编译预处理函数和编译预处理6 6C+C+C+C+程序设计程序设计程序设计程序设计-中南大学中南大学中南大学中南大学struct 结构体类型名结构体类型名 数据类型成员名数据类型成员名1;数据类型成员名数据类型成员名2;:数据类型成员名数据类型成员名n;结构体
5、类型名是用户定义的任何一个有效的标结构体类型名是用户定义的任何一个有效的标识符,它的作用就如同任何一个基本类型名,利用识符,它的作用就如同任何一个基本类型名,利用它能够定义具有该结构类型的变量或函数;它能够定义具有该结构类型的变量或函数;5.1.2 5.1.2 结构体类型的定义结构体类型的定义结构体类型定义的形式结构体类型定义的形式:定义结构体类定义结构体类型的关键字型的关键字,不不能省略能省略注意分号不要省略注意分号不要省略C+C+C+C+程序设计程序设计程序设计程序设计函数和编译预处理函数和编译预处理函数和编译预处理函数和编译预处理7 7C+C+C+C+程序设计程序设计程序设计程序设计-中
6、南大学中南大学中南大学中南大学struct student char id7;/长度为7的字符数组id,表示学号 char name10;/长度为10的字符数组name,表示学号 float score;/单精度实数类型score,表示入学分数 ;/注意分号不要省略例:用结构体类型来描述学生的学籍信息(学号、例:用结构体类型来描述学生的学籍信息(学号、姓名和入学分数)姓名和入学分数)C+C+C+C+程序设计程序设计程序设计程序设计函数和编译预处理函数和编译预处理函数和编译预处理函数和编译预处理8 8C+C+C+C+程序设计程序设计程序设计程序设计-中南大学中南大学中南大学中南大学结构体类型的特
7、点总结如下:结构体类型的特点总结如下:(1 1)结构体类型是用户自行构造的。)结构体类型是用户自行构造的。(2 2)它由若干不同的基本数据类型的数据构成。)它由若干不同的基本数据类型的数据构成。(3 3)它属于)它属于C+C+语言的一种数据类型,与整型、实型语言的一种数据类型,与整型、实型相当。因此,定义它时不分配空间,只有用它定义变相当。因此,定义它时不分配空间,只有用它定义变量时才分配空间。量时才分配空间。C+C+C+C+程序设计程序设计程序设计程序设计函数和编译预处理函数和编译预处理函数和编译预处理函数和编译预处理9 9C+C+C+C+程序设计程序设计程序设计程序设计-中南大学中南大学中
8、南大学中南大学5.1.3 结构体变量的定义一、一、一、一、先定义结构体类型再定义变量名先定义结构体类型再定义变量名先定义结构体类型再定义变量名先定义结构体类型再定义变量名这是这是C+C+语言中定义结构体类型变量最常见语言中定义结构体类型变量最常见的方式,一般语法格式如下:的方式,一般语法格式如下:struct struct 结构体类型名结构体类型名 成员说明列表;成员说明列表;structstruct 结构体类型名结构体类型名 变量名;变量名;在C+中,一般可以省略C+C+C+C+程序设计程序设计程序设计程序设计函数和编译预处理函数和编译预处理函数和编译预处理函数和编译预处理1010C+C+C
9、+C+程序设计程序设计程序设计程序设计-中南大学中南大学中南大学中南大学struct student char id7;char name10;float score;struct student st1,st2;例:定义描述学生的学籍信息(学号、姓名和入学例:定义描述学生的学籍信息(学号、姓名和入学分数)的变量分数)的变量在C+中,一般写成:student st1,st2;C+C+C+C+程序设计程序设计程序设计程序设计函数和编译预处理函数和编译预处理函数和编译预处理函数和编译预处理1111C+C+C+C+程序设计程序设计程序设计程序设计-中南大学中南大学中南大学中南大学二、在声明类型的同时
10、定义变量二、在声明类型的同时定义变量二、在声明类型的同时定义变量二、在声明类型的同时定义变量struct struct 结构体名结构体名 成员说明列表;成员说明列表;变量名表列;变量名表列;struct student char id7;char name20;float score;st1,st2;5.1.3 结构体变量的定义C+C+C+C+程序设计程序设计程序设计程序设计函数和编译预处理函数和编译预处理函数和编译预处理函数和编译预处理1212C+C+C+C+程序设计程序设计程序设计程序设计-中南大学中南大学中南大学中南大学三、直接定义结构体类型变量三、直接定义结构体类型变量三、直接定义结构
11、体类型变量三、直接定义结构体类型变量5.1.3 结构体变量的定义结构体变量的定义struct 成员说明列表;变量名表列;注意注意:该方式没有结构体类该方式没有结构体类型名型名,这种形式虽然简这种形式虽然简单,但不能在再次需单,但不能在再次需要定义该类型的变量要定义该类型的变量时,使用所定义的结时,使用所定义的结构体类型。构体类型。struct char name10;char id7;float score;st1,st2;C+C+C+C+程序设计程序设计程序设计程序设计函数和编译预处理函数和编译预处理函数和编译预处理函数和编译预处理1313C+C+C+C+程序设计程序设计程序设计程序设计-中
12、南大学中南大学中南大学中南大学(1)(1)类型与变量是不同的概念,不要混淆。类型与变量是不同的概念,不要混淆。对结构体变量来说,对结构体变量来说,在定义时一般先定义一个结构在定义时一般先定义一个结构体类型,然后定义该类型的变量。在编译时,是不体类型,然后定义该类型的变量。在编译时,是不会为类型分配空间的,只为变量分配空间。会为类型分配空间的,只为变量分配空间。关于结构体变量的几点说明关于结构体变量的几点说明:C+C+C+C+程序设计程序设计程序设计程序设计函数和编译预处理函数和编译预处理函数和编译预处理函数和编译预处理1414C+C+C+C+程序设计程序设计程序设计程序设计-中南大学中南大学中
13、南大学中南大学(2)(2)结构体变量的存储空间结构体变量的存储空间 理论上理论上,是结构体变量各成员所占是结构体变量各成员所占内存空间的总和。内存空间的总和。例如例如:结构体变量结构体变量st1在内存中占在内存中占(7+10+4=217+10+4=21)个字节)个字节,但系统通常为一个但系统通常为一个结构体变量分配整数倍大小的机器字长结构体变量分配整数倍大小的机器字长(对(对32位机而言,一个字长占位机而言,一个字长占4个字节),个字节),所以,实际上系统为所以,实际上系统为st1分配了分配了24个字节的个字节的内存空间。内存空间。但一般情况下,对于结构体类型变量的内但一般情况下,对于结构体类
14、型变量的内存空间,只讨论其理论值。存空间,只讨论其理论值。结构变量占实际内存大小可用结构变量占实际内存大小可用 sizeof 运算:运算:sizeof(运算量运算量)struct student char id7;char name10;float score;st1;C+C+C+C+程序设计程序设计程序设计程序设计函数和编译预处理函数和编译预处理函数和编译预处理函数和编译预处理1515C+C+C+C+程序设计程序设计程序设计程序设计-中南大学中南大学中南大学中南大学struct date int month;int day;int year;struct student int num;ch
15、ar name20;char sex;date birthday;char addr40;stu1,stu2;date是结构体类型,birthday是date类型的成员(3)成员也可以是一个结构体变量,即结构体嵌套定义。C+C+C+C+程序设计程序设计程序设计程序设计函数和编译预处理函数和编译预处理函数和编译预处理函数和编译预处理1616C+C+C+C+程序设计程序设计程序设计程序设计-中南大学中南大学中南大学中南大学5.1.4 5.1.4 结构体变量的引用和初始化结构体变量的引用和初始化一、用结构体变量名引用其成员一、用结构体变量名引用其成员格式:结构体变量名结构体变量名.成员名成员名str
16、uct date int month;int day;int year;struct student int num;char name20;char sex;date birthday;char addr40;stu1,stu2;stu1.num=20312;stu1.num表示引用结表示引用结构体变量构体变量stu1中的中的num成员成员C+C+C+C+程序设计程序设计程序设计程序设计函数和编译预处理函数和编译预处理函数和编译预处理函数和编译预处理1717C+C+C+C+程序设计程序设计程序设计程序设计-中南大学中南大学中南大学中南大学5.1.4 5.1.4 结构体变量的引用和初始化结构体
17、变量的引用和初始化注意:注意:1.1.如果成员本身也是一个结构体类型,如果成员本身也是一个结构体类型,则要用若干个成员运算符则要用若干个成员运算符,一级一级一级一级地找到最低一级的成员。地找到最低一级的成员。stu1.birthday.month=5stu1.birthday.month=5;一、用结构体变量名引用其成员一、用结构体变量名引用其成员格式:结构体变量名结构体变量名.成员名成员名struct date int month;int day;int year;struct student int num;char name20;char sex;date birthday;char a
18、ddr40;stu1,stu2;C+C+C+C+程序设计程序设计程序设计程序设计函数和编译预处理函数和编译预处理函数和编译预处理函数和编译预处理1818C+C+C+C+程序设计程序设计程序设计程序设计-中南大学中南大学中南大学中南大学 2.2.对结构体变量的成员可以像普通对结构体变量的成员可以像普通变量一样进行各种运算变量一样进行各种运算 stu2.numstu1.num;stu1.birthday.day+;由由于于“.”“.”运运算算符符的的优优先先级级最最高高,因因此此stu1.birthday.day+;stu1.birthday.day+;相相 当当 于于(stu1.birthday
19、.day)+;(stu1.birthday.day)+;5.1.4 5.1.4 结构体变量的引用和初始化结构体变量的引用和初始化struct date int month;int day;int year;struct student int num;char name20;char sex;date birthday;char addr40;stu1,stu2;C+C+C+C+程序设计程序设计程序设计程序设计函数和编译预处理函数和编译预处理函数和编译预处理函数和编译预处理1919C+C+C+C+程序设计程序设计程序设计程序设计-中南大学中南大学中南大学中南大学 3.3.属于同一结构体类型的各
20、个成属于同一结构体类型的各个成员之间可以相互赋值员之间可以相互赋值。stu2stu1;4.不能将一个结构体变量作为一个不能将一个结构体变量作为一个整体进行输入和输出,只能对结整体进行输入和输出,只能对结构体变量中的各个成员分别进行构体变量中的各个成员分别进行输入和输出。输入和输出。coutstu1;/错误错误cout成员名成员名 一个指向结构体变量的指针一个指向结构体变量的指针就是该变量所占据的内存段的起始就是该变量所占据的内存段的起始地址。如果要通过结构体变量的指地址。如果要通过结构体变量的指针来引用结构体变量的成员,必须针来引用结构体变量的成员,必须使用使用“-”“-”运算符。运算符。p.
21、x=23.7;p.y=3.5 pt=&u;pt-x=12.2;pt-y=24.3;5.1.4 5.1.4 结构体变量的引用和初始化结构体变量的引用和初始化C+C+C+C+程序设计程序设计程序设计程序设计函数和编译预处理函数和编译预处理函数和编译预处理函数和编译预处理2121C+C+C+C+程序设计程序设计程序设计程序设计-中南大学中南大学中南大学中南大学“*指针变量指针变量”表示指针变量表示指针变量所指对象,所以通过指向结构体所指对象,所以通过指向结构体的指针变量引用结构体成员也可的指针变量引用结构体成员也可写成以下形式:写成以下形式:(*指针变量指针变量).结构体成员名结构体成员名(*pt)
22、.x=12.2这里圆括号是必须的,因为运算符这里圆括号是必须的,因为运算符“*”“*”的优先级低于运算符的优先级低于运算符“.”“.”。5.1.4 5.1.4 结构体变量的引用和初始化结构体变量的引用和初始化struct node float x,y;p,u,*pt;C+C+C+C+程序设计程序设计程序设计程序设计函数和编译预处理函数和编译预处理函数和编译预处理函数和编译预处理2222C+C+C+C+程序设计程序设计程序设计程序设计-中南大学中南大学中南大学中南大学 结构体变量结构体变量.成员名。如成员名。如:stu.num (*p).成员名。如成员名。如:(*p).num p-成员名。如成员
23、名。如:p-num。p-np-np-n+p-n+p-n+p-n三种形式等价三种形式等价三种形式等价三种形式等价请分析以下几种运算请分析以下几种运算请分析以下几种运算请分析以下几种运算:得到p指向的结构体变量中的成员n的值。p指向的结构体变量中的成员n的值,用完该值后使它加1。p指向的结构体变量中的成员n的值,并使之加1,然后再使用它。结构体成员的三种表示方法:结构体成员的三种表示方法:C+C+C+C+程序设计程序设计程序设计程序设计函数和编译预处理函数和编译预处理函数和编译预处理函数和编译预处理2323C+C+C+C+程序设计程序设计程序设计程序设计-中南大学中南大学中南大学中南大学结构体变量
24、初始化的方式和数组类似,也是在定义后面用结构体变量初始化的方式和数组类似,也是在定义后面用花括号括起来花括号括起来 struct Student int num;char name20;char sex;int age;float score;char addr30;student1=10001,Zhangin,M,19,90.5,Shanghai;Student student2=10002,Wang Li“,F,20,98,Beijing;也可以采取声明类型与定义变量分开的形式,在定义变量时进行初始化5.1.4 5.1.4 结构体变量的引用和初始化结构体变量的引用和初始化C+C+C+C+程
25、序设计程序设计程序设计程序设计函数和编译预处理函数和编译预处理函数和编译预处理函数和编译预处理2424C+C+C+C+程序设计程序设计程序设计程序设计-中南大学中南大学中南大学中南大学【例】结构体变量的引用与初始化示例【例】结构体变量的引用与初始化示例【例】结构体变量的引用与初始化示例【例】结构体变量的引用与初始化示例#includestruct student int num;char name10;char sex;float score;void main()student st1,st2=1001,Lin qiang,m,95.5,*p;p=&st1;/p指向结构体变量指向结构体变量s
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 课件 自定义 数据类型
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内