1、自定义数据类型自定义数据类型枚举类型枚举类型7.1结构体结构体7.2结构体与函数结构体与函数7.3结构数据与结构指针结构数据与结构指针7.4学习目标学习目标通过本章的学习,同学们能够:通过本章的学习,同学们能够:学会使用复合数据类型;学会使用复合数据类型;会使用枚举类型及应用场合;会使用枚举类型及应用场合;掌握结构体的用法;掌握结构体的用法;7.1 7.1 枚举类型枚举类型内容内容C+中有一种数据类型称为枚举(中有一种数据类型称为枚举(Enumeration)类型)类型,它允许用户自己来定义一种数据类型,并且列出该,它允许用户自己来定义一种数据类型,并且列出该数据类型的取值范围。数据类型的取值
2、范围。我们说变量就好像是一个箱子,而数据类型就好像是我们说变量就好像是一个箱子,而数据类型就好像是箱子的类型,所以我们在创建某个枚举类型的变量的箱子的类型,所以我们在创建某个枚举类型的变量的时候,必须先把这个枚举类型设计好,即把箱子的类时候,必须先把这个枚举类型设计好,即把箱子的类型设计好。定义枚举类型的语法格式为:型设计好。定义枚举类型的语法格式为:enum类型名类型名常量常量1,常量常量2,常量常量n;7.2 7.2 结构体结构体我们把变量比作为箱子。在现实生活中,如果小箱子太多太杂乱了,我们把变量比作为箱子。在现实生活中,如果小箱子太多太杂乱了,我们会拿一个大收纳箱来,把小箱子一个个有序
3、地放到收纳箱里面。我们会拿一个大收纳箱来,把小箱子一个个有序地放到收纳箱里面。这样一来,在我们视线里的箱子就变少了,整理起来也会比较方便。这样一来,在我们视线里的箱子就变少了,整理起来也会比较方便。那么,我们能否把这么多凌乱的变量整理到一个变量当中呢?那么,我们能否把这么多凌乱的变量整理到一个变量当中呢?C+中有一种数据类型称为结构(中有一种数据类型称为结构(Structure)类型,它允许用户自)类型,它允许用户自己定义一种数据类型,并且把描述该类型的各种数据类型一一整合己定义一种数据类型,并且把描述该类型的各种数据类型一一整合到其中。到其中。学生学生学号整型学号整型姓名字符串姓名字符串年龄
4、整型年龄整型院系字符串院系字符串平均成绩浮点型平均成绩浮点型定义一种结构类型的语法格式为:定义一种结构类型的语法格式为:struct结构类型名结构类型名数据类型数据类型成员数据成员数据1;数据类型数据类型成员数据成员数据2;数据类型数据类型成员数据成员数据n;和定义枚举类型类似,定义结构类型的位置必和定义枚举类型类似,定义结构类型的位置必须在首次使用该类型名之前,否则程序将无法须在首次使用该类型名之前,否则程序将无法正确识别该类型。要注意,定义完结构类型后正确识别该类型。要注意,定义完结构类型后的分号是必不可少的,否则将会引起错误的分号是必不可少的,否则将会引起错误7.3 7.3 结构体与函数
5、结构体与函数结构体也可以用作函数参数或返回值。结构体也可以用作函数参数或返回值。7.3.17.3.1结构作为参数结构作为参数我们在前面的一些章节中知道,变量作为函数我们在前面的一些章节中知道,变量作为函数的参数,了解它是值传递还是地址传递是非常的参数,了解它是值传递还是地址传递是非常重要的。因为这意味着参数在函数体内的修改重要的。因为这意味着参数在函数体内的修改是否会影响到该变量本身。是否会影响到该变量本身。不同于数组,结构是按值传递的。也就是说整不同于数组,结构是按值传递的。也就是说整个结构的内容都复制给了形参,即使某些成员个结构的内容都复制给了形参,即使某些成员数据是一个数组。数据是一个数
6、组。如果我们希望能在函数修改实参,则可如果我们希望能在函数修改实参,则可以使用引用的方法。由于结构往往整合以使用引用的方法。由于结构往往整合了许多的成员数据,它的数据量也绝对了许多的成员数据,它的数据量也绝对不可小觑。使用值传递虽然能够保护实不可小觑。使用值传递虽然能够保护实参不被修改,但是却会或多或少地影响参不被修改,但是却会或多或少地影响到程序的运行效率。所以,一般情况下,到程序的运行效率。所以,一般情况下,我们选择引用传递的方法我们选择引用传递的方法7.3.2 7.3.2 结构作为返回值结构作为返回值一般情况下,函数只能返回一个变量。如果要一般情况下,函数只能返回一个变量。如果要尝试返回
7、多个变量,那么就要通过在参数中使尝试返回多个变量,那么就要通过在参数中使用引用,再把实参作为返回值。然而,这种方用引用,再把实参作为返回值。然而,这种方法会导致一大堆参数,程序的可读性也较差。法会导致一大堆参数,程序的可读性也较差。当结构出现以后,我们可以把所有需要返回的当结构出现以后,我们可以把所有需要返回的变量整合到一个结构中来,问题就解决了变量整合到一个结构中来,问题就解决了结构是一种数据类型,因此它也有对应的结构是一种数据类型,因此它也有对应的结构数组和指向结构的指针。结构数组和指向结构的指针。7.4 7.4 结构数组与结构指针结构数组与结构指针定义结构数组和定义其他类型的数组在语法上
8、并定义结构数组和定义其他类型的数组在语法上并无差别。需要注意的是,在定义结构数组之前,无差别。需要注意的是,在定义结构数组之前,我们必须先定义好这个结构我们必须先定义好这个结构7.4.1 7.4.1 结构数组结构数组7.4.2 7.4.2 结构指针结构指针在上一章我们了解到指针的一个重要作用就是在上一章我们了解到指针的一个重要作用就是实现内存的动态分配(堆内存)。待我们学完实现内存的动态分配(堆内存)。待我们学完了这一章,我们会发现结构指针也是一个非常了这一章,我们会发现结构指针也是一个非常有用的工具。有用的工具。所谓结构指针就是指向结构的指针。定义好一所谓结构指针就是指向结构的指针。定义好一
9、个结构之后,定义一个结构指针变量的个结构之后,定义一个结构指针变量的结构类型名结构类型名*指针变量名指针变量名;我们知道一般的指针是通过间接引用操作符我们知道一般的指针是通过间接引用操作符“*”来访问它指向的变量。那么我们如何访问来访问它指向的变量。那么我们如何访问结构指针所指向的变量的成员数据呢?这里要结构指针所指向的变量的成员数据呢?这里要介绍箭头操作符介绍箭头操作符“-”,我们用它可以访问到指,我们用它可以访问到指针指向的变量的成员数据。它的格式为:针指向的变量的成员数据。它的格式为:指针变量名指针变量名-成员数据成员数据需要注意的是,箭头操作符的左边一定需要注意的是,箭头操作符的左边一
10、定是一个结构指针,而成员操作符的左边是一个结构指针,而成员操作符的左边一定是一个结构变量,两者不能混淆使一定是一个结构变量,两者不能混淆使用。用。本章小结本章小结C+提供了许多种基本的数据类型提供了许多种基本的数据类型(如如int、float、double、char等等)供用户使用。但是由于供用户使用。但是由于程序需要处理的问题往往比较复杂,而且呈多程序需要处理的问题往往比较复杂,而且呈多样化,已有的数据类型显得不能满足使用要求样化,已有的数据类型显得不能满足使用要求。因此。因此C+允许用户根据需要自己声明一些类允许用户根据需要自己声明一些类型型,例如第例如第5章介绍的数组就是用户自己声明的章
11、介绍的数组就是用户自己声明的数据类型。此外,用户可以自己声明的类型还数据类型。此外,用户可以自己声明的类型还有结构体类型、共用体类型、枚举类型、类类有结构体类型、共用体类型、枚举类型、类类型等,这些统称为用户自定义类型。型等,这些统称为用户自定义类型。用户自定义数据类型是对基本数据类型的扩充用户自定义数据类型是对基本数据类型的扩充,正是有了结构体数据类型的应用,才有了类,正是有了结构体数据类型的应用,才有了类的定义,使得的定义,使得C语言有长足发展。语言有长足发展。同学们通过对这些简单扩充数据类型的学习,同学们通过对这些简单扩充数据类型的学习,为后面学习类类型打好基础为后面学习类类型打好基础。
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。