C语言构造类型.ppt
《C语言构造类型.ppt》由会员分享,可在线阅读,更多相关《C语言构造类型.ppt(59页珍藏版)》请在三一办公上搜索。
1、第八章 构造类型,第八章 构造类型,8.1 概述 8.2 结构体 8.3 定义结构体类型变量的方法 8.4 结构体变量的引用 8.5 结构体变量的初始化 8.6 结构体数组 8.7 指向结构体类型数据的指针,8.8 链表 8.9 共用体 8.10 枚举类型8.11 自定义类型标识符,8.1 概述,在前面学习了一些基本的数据类型(也叫简单类型),如整型、实型、字符型等,这些类型都是系统定义好的,程序员可以直接拿来使用。对于复杂的客观实体的定义,系统没有提供。例如一个学生的学号、姓名、性别、出生日期、学习成绩、家庭住址等属性的整体描述。,返回,C语言提供了自定义数据类型的方法,通过自定义类型将不同
2、类型的数据组合成一个有机的整体,这些数据在一个整体中是互相联系的。这种自定义的数据类型叫构造类型。实际上在前面已经学习了一种构造类型数组,数组是具有相同数据类型的一组元素集合。除了数组之外还有结构体、共用体。,8.1 概述,8.2 结构体,结构体类型就是将不同类型的数据组合成一个有机的整体,以便于引用。一个学生的属性:学号(num)、姓名(name)、性别(sex)、年龄(age)、成绩(score)、家庭住址(addr),返回,C语言没有提供这种现成的数据类型,因此用户必须要在程序中建立所需的结构体类型。声明一个结构体类型的一般形式为:,8.2 结构体,以学生实体为例,建立一个结构体类型:,
3、8.2 结构体,struct student int num;char name20;char sex;int age;float score;char addr30;,声明了一个叫student的结构体类型,它包括num、name、sex、age、score、addr等不同类型的数据项。注意:(1)结构体类型名为:struct student,其中struct是定义结构体类型的关键字,用来定义变量的类型。(2)在 中定义的变量我们叫做成员,其定义方法和前面变量定义的方法一样,只是不能忽略最后的分号。,8.2 结构体,必须遵循先声明结构体类型,再定义结构体变量的原则。三种定义结构体变量的方法:
4、(1)先声明结构体类型再定义结构体变量名 格式如下:,8.3 定义结构体类型变量的方法,返回,8.3 定义结构体类型变量的方法,例如:,struct student int num;char name20;char sex;int age;float score;char addr30;struct student stu1,stu2;,说明:定义结构体变量时,结构体类型名中的struct不能省,不能变成:student stu1,stu2。(2)在声明类型的同时定义变量 格式如下:,8.3 定义结构体类型变量的方法,例如:,8.3 定义结构体类型变量的方法,struct student in
5、t num;char name20;char sex;int age;float score;char addr30;stu1,stu2;,(3)直接定义结构类型变量 格式如下:,8.3 定义结构体类型变量的方法,其特点是在声明时不出现结构体名。例如:,struct int num;char name20;char sex;int age;float score;char addr30;stu1,stu2;,关于结构体类型说明:类型与变量是两个不同的概念,不能混淆。变量分配内存空间,类型不分配空间。对结构体中的成员可以单独使用,相当于普通变量,引用方法后面具体讲述。结构体中成员也可以是一个结构
6、体变量。,8.3 定义结构体类型变量的方法,struct date int month;int day;int year;struct student int num;char name20;char sex;int age;struct date birthday;/*birthday是struct date类型*/char addr30;stu1,stu2;,引用结构体变量要遵守如下规则:(1)不能将一个结构体变量作为一个整体进行输入输出(引用),而只能对结构体变量中的各个成员分别进行输入和输出(引用)。结构体变量成员引用格式:,8.4 结构体变量的引用,“.”是成员(又叫分量)运算符,它
7、的优先级最高。例如 stu1.num=10001;,返回,(2)如果成员本身又属于一个结构体类型,则要用若干个成员运算符,一级一级地找到最低一级的成员。只能对最低的成员进行赋值或存取以及运算。例如:stu1.birthday.year=1983;(3)对结构体变量成员可以像普通变量一样进行各种运算。例如:stu1.num+;stu1.age+=2;(4)可以引用结构体变量成员的地址。也可以引用结构体变量的地址。,8.4 结构体变量的引用,结构变量的初始化,8.5 结构体变量的初始化,struct student Int num;char name20;char sex;Int age;char
8、 addr30;stu1=10001,Liming,M,18,HubeiEnshi;,返回,定义结构体数组 在定义结构体数组之前必须先声明结构体类型。如前面定义的结构体类型struct student。声明好结构体类型之后就可以定义结构体数组了,其方法和定义简单类型的数组相似:,8.6 结构体数组,也可以直接定义结构体数组,返回,结构体数组的初始化,8.6 结构体数组,struct student int num;char name20;char sex;int age;float score;char addr30;stu2=10001,Liming,M,18,89.5,HubeiEnshi
9、,10002,ZhangJun,F,17,98,HubeiYichang;,可以不给出数组长度,数组长度由初始化的数据决定。stu=,;,8.6 结构体数组,指向结构体变量的指针 和定义简单变量的指针变量一样定义指向结构体变量的指针变量。,8.7 指向结构体类型数据的指针,用结构体指针变量引用结构体变量。,返回,例如:struct student stu1,*sp;sp=,8.7 指向结构体类型数据的指针,用结构体变量和指向结构体的指针作函数参数(1)用结构体成员变量做实际参数与简单变量作实参一样,属于“值传递”方式,只是要注意形参与实参在类型上要保持一致。,8.7 指向结构体类型数据的指针,
10、(2)用结构体变量做实际参数 注意:结构体变量的传递采用的是“值传递”的方式。形参与实参的类型必须相同。形参在函数调用期间也要占用内存单元,因此这种传递方式在空间与时间上开销较大。,8.7 指向结构体类型数据的指针,(3)指向结构体变量(或数组)的指针做实际参数用指向结构体变量(或数组)的指针做实参是经常采用的一种方法。形参指针和实参指针都指向同一存贮单元,这种特点为函数返回多个数据提供了途径。,8.7 指向结构体类型数据的指针,8.8 链表,链表概述 问题的提出:存放一个班级的学生信息,可以采用数组的方法,要存放30个学生就设计长度为30的数组,要存放50个学生就设计长度为50的数组。假如事
11、先并不知道学生人数,就必须将数组设计得足够大,例如,设计长度为100的数组,但实际学生数只有30,这样就会造成内存的浪费。显然用数组只适合于已知长度的数据,因为数组对内存的占用是静态的,程序运行过程中数组的长度是不变的。,返回,链表是一种常见的重要的数据结构。它可以动态的分配存储空间,需要多少就分配多少,是一种动态地进行存储分配的结构。一种简单链表如图所示:,8.8 链表,按规定在一个结构体的定义中,其成员类型可以是除本身结构类型之外的任何已有类型。也可以是任何已有类型(包括本身类型在内)的指针类型。结构体不能进行除指针类型数据成员的递归定义。这是因为无论什么类型的指针变量所占的空间是确定的,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 构造 类型
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-5426354.html