- 3
- 0
- 约1.8万字
- 约 18页
- 2019-10-11 发布于福建
- 举报
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个字节
您可能关注的文档
- 危险告知书通用版.docx
- 2019秋浙教版科学七年级上册同步测试试题:第二章专题三 生物体的结构层次、分类及物种的多样性.docx
- 通用技术第一课课件.ppt
- 二、2-3平面的投影.ppt
- 合福铁路工程报验申请表.doc
- 仿清水混凝土施工工艺.docx
- 华中师大版七年级上册信息技术教案设计:4.1信息的仓库——Windows资源管理器.doc
- 2019-2020年人教B版数学选修4-5讲义:第2章+2.2 排序不等式及答案.doc
- 山西人教版物理 第15讲 电功和电功率.docx
- 人教部编本(2017)八年级语文上册 6、藤野先生 课程教学设计.doc
- 第四章-陶艺的成型技法.ppt
- 内蒙古赤峰三中2020届九年级上学期第一次月考物理考试试卷(无答案).docx
- 人教版英语高一必修一Unit2 Warming up、Pre-reading、Reading、Comprehending课件.ppt
- 2019-2020年新培优同步教科版物理必修一练习:第2章+5.力的合成.docx
- 2019-2020年新教材素养突破人教版历史必修中外历史纲要(上)讲义:第三单元+单元高效整合及答案.doc
- 2019年暑假小学数学教师培训课件心得体会.docx
- 苏科版生物七年级上册2.2.4生物对环境的适应.ppt
- 音乐一年级上册第一单元表格.doc
- 人教版高中历史必修三第七单元第19课 建国以来的重大科技成就.pptx
- 2019-2020年人教统编语文八上第一单元素质检测题.doc
原创力文档

文档评论(0)