2019年山东省信息学奥赛夏令营讲义设计2.3.1结构体.docxVIP

  • 3
  • 0
  • 约1.8万字
  • 约 18页
  • 2019-10-11 发布于福建
  • 举报

2019年山东省信息学奥赛夏令营讲义设计2.3.1结构体.docx

2.3.1 结构体 知识点 结构体的定义、声明和应用。 知识讲解 假设一个学生的信息由学号、姓名、性别、年龄、成绩组成,一本图书的信息由编号、书名、作者、出版社、价格组成,那么如何描述这些类型不同的相关数据呢?前面我们已经学过各种基本类型的变量以及数组。而且我们知道,各个变量之间是相互独立的,无任何联系;而数组只能用来表示一批相同类型的数据。因此,若用单个变量来表示学生的姓名、性别、年龄等属性,则难以反映数据之间的内在联系;若用数组,则根本无法表示,因为姓名、性别、年龄等不属于同一种数据类型。 在实际问题中,我们经常会遇到这种情况,即为了描述一个事物的不同属性,需要用到各种不同类型的数据,这些数据彼此相关,形成一个有机的整体。我们在编程时要用多个不同类型的变量来描述一个事物,非常麻烦,希望只用一个变量就能代表一个“学生”这样的事物。为此,我们引入“结构体”这种数据类型来描述由多个不同类型的数据组成的数据集合。C++允许程序员自己定义新的数据类型。因此针对“学生”这种事物,可以定义一种新的名为Student的数据类型,一个Student类型的变量就能描述一个学生的全部信息。 1.结构体的含义 什么是结构体呢?结构体是将不同类型的数据根据需要组合成一个有机的整体,以便于引用。这个整体是一个构造数据类型——结构体类型,其中的数据是相互联系的。如要存储一个学生的有关信息(学号、姓名、性别、年龄、成绩等),可采用结构体类型来描述信息。 2.结构体及结构体变量的定义 1)定义结构体: C++中的结构体支持在已有基本数据类型的基础上定义复合数据类型,用“struct”关键字来定义一个结构体,也就定义了一个新的数据类型。 定义结构体: struct 结构名{ //struct是结构体关键字 成员类型 成员名; //可以有多个成员变量,也可以有多个成员函数 …… 成员类型 成员名; ……}; //定义结构体用分号“;”表示结束。 如定义一个名为Student的结构体: struct Student { int num; //学号 char name[20]; //姓名 char gender; //性别 float score; //成绩 }; 定义了一个结构体,即定义了一种新的数据类型。在上面我们定义了名为Student的数据类型,一个Student类型的变量有4个成员组成:int型的num,表示学号;char型数组Name,表示姓名;char型的gender,表示性别;float型的score,表示成绩。定义了新的数据类型Student之后,我们可以用它来定义变量:Stuent stu1,stu2;其中 stu1,stu2即为结构体变量。要注意结构体类型是一个存储模型,本身不占内存,仅当定义其变量时,系统才按此存储模型为其变量分配相应的内存。 2)定义结构体变量: (1)定义结构体的同时定义结构体变量 struct 结构名{ 成员类型 成员名; …… 成员类型 成员名; } 结构体变量列表; //可以同时定义多个结构体变量 struct Student{ int num; char name[20]; char gender; float score; }stu1,stu2; 在定义结构体Student的同时定义了stu1,stu2两个结构体变量,结构体变量名列表的各个变量之间用“,”隔开。 (2)先定义结构体再定义结构体变量 struct 结构名{ 成员类型 成员名; …… 成员类型 成员名; }; 结构体名 结构体变量列表; //同样可以同时定义多个结构体变量 struct Student{ int num; char name[20]; char gender; float score; }; Student stu1, stu2; (3)直接定义结构类型变量(无名定义) struct{ int num; char name[20]; char gender; float score; }stu1,stu2; //省略了结构体类型名,以后不能再用这种结构体类型定义其它变量 在定义结构体变量时要注意:结构体名和结构体变量名不能相同。在定义结构体时,系统不对其分配实际内存,只有在定义结构体变量时,系统才为其分配内存。一般来说,结构变量中的各个成员变量在内存中一般是连续存放的,一个结构变量所占的内存空间的大小,就是结构中所有成员变量大小之和。我们可以用sizeof(变量名或类型标识符)测试某种类型的变量在内存中所占的字节数,如一个Student类型的变量,占用的内存空间为sizeof(Student)=29个字节

文档评论(0)

1亿VIP精品文档

相关文档