- C++
C++ 结构体教程
- 2024-12-7 21:44:57 @
C++结构体教程
1. 什么是结构体?
结构体(struct
)是一种用户自定义的数据类型,它允许你将不同类型的数据组合在一起,形成一个新的复合数据类型。就像是一个“数据包裹”,里面可以装各种不同类型的“小数据”。
例如,如果你想描述一个学生的信息,学生有姓名(string
类型)、年龄(int
类型)和成绩(float
类型),就可以用结构体把这些信息组合在一起,方便管理和使用。
2. 定义结构体
- 基本语法
- 定义结构体的基本语法如下:
struct 结构体名 { 数据类型 成员变量1; 数据类型 成员变量2; // 可以有更多成员变量... };
- 例如,定义一个表示学生信息的结构体:
struct Student { std::string name; int age; float score; };
- 这里定义了一个名为
Student
的结构体,它有三个成员变量:name
(姓名)、age
(年龄)和score
(成绩)。
3. 声明和使用结构体变量
- 声明变量
- 声明结构体变量的方式和声明其他基本数据类型的变量类似。有两种常见的方式:
- 方式一:先定义结构体,再声明变量
- 例如,在定义了
Student
结构体后,可以这样声明变量:
Student student1;
- 这里声明了一个
Student
类型的变量student1
,此时这个变量包含了name
、age
和score
这三个成员变量,不过它们还没有被初始化,有默认的值(对于string
类型是空字符串,int
类型是0,float
类型是0.0)。
- 例如,在定义了
- 方式二:在定义结构体的同时声明变量
- 可以这样写:
struct Point { int x; int y; } point1, point2;
- 这里定义了一个名为
Point
的结构体,同时声明了两个Point
类型的变量point1
和point2
。
- 访问成员变量
- 可以使用“.”(点运算符)来访问结构体变量的成员变量。例如,对于前面声明的
student1
变量:
student1.name = "Tom"; student1.age = 18; student1.score = 90.5;
- 这样就分别给
student1
的name
、age
和score
成员变量赋值了。也可以通过成员变量获取其值,例如:
std::cout << "学生姓名:" << student1.name << ", 年龄:" << student1.age << ", 成绩:" << student1.score << std::endl;
- 可以使用“.”(点运算符)来访问结构体变量的成员变量。例如,对于前面声明的
4. 结构体数组
- 定义和初始化
- 可以定义一个结构体数组,就像定义普通数据类型的数组一样。例如,定义一个包含3个
Student
结构体的数组:
Student students[3];
- 也可以在定义时进行初始化,例如:
Student students[3] = { {"Alice", 17, 85.0}, {"Bob", 18, 90.0}, {"Charlie", 19, 88.0} };
- 这里初始化了一个
Student
结构体数组students
,每个元素都是一个Student
结构体,并且都有相应的初始值。
- 可以定义一个结构体数组,就像定义普通数据类型的数组一样。例如,定义一个包含3个
- 访问结构体数组元素的成员变量
- 可以通过下标访问结构体数组中的元素,然后再使用“.”运算符访问其成员变量。例如:
std::cout << "第二个学生的姓名:" << students[1].name << std::endl;
- 这会输出
students
数组中第二个元素(下标为1)的name
成员变量的值。
5. 结构体作为函数参数
- 传递方式
- 结构体可以作为函数的参数进行传递,有两种常见的传递方式:值传递和引用传递。
- 值传递:
- 例如,定义一个函数来打印学生信息:
void printStudent(Student student) { std::cout << "姓名:" << student.name << ", 年龄:" << student.age << ", 成绩:" << student.score << std::endl; }
- 当调用这个函数时,会将实参的值复制一份给形参。如果结构体比较大,这种复制可能会导致效率问题。
- 引用传递:
- 可以这样定义函数:
void printStudentRef(const Student& student) { std::cout << "姓名:" << student.name << ", 年龄:" << student.age << ", 成绩:" << student.score << std::endl; }
- 这里使用了引用(
&
),并且加上了const
关键字,表示这个函数不会修改传入的结构体。引用传递不会进行复制,效率更高,尤其是对于大型结构体。
- 调用函数示例
- 假设已经有了
Student
结构体变量student1
,调用函数的方式如下: - 值传递调用:
printStudent(student1);
- 引用传递调用:
printStudentRef(student1);
- 假设已经有了
6. 结构体中的函数(成员函数)
- 定义和使用
- 结构体中也可以包含函数,这些函数称为成员函数。成员函数可以访问结构体的成员变量,方便对结构体进行操作。例如,给
Student
结构体添加一个成员函数来判断学生是否及格:
struct Student { std::string name; int age; float score; bool isPass() { return score >= 60; } };
- 可以这样使用这个成员函数:
Student student2; student2.score = 70; if (student2.isPass()) { std::cout << student2.name << " 及格了。" << std::endl; }
- 结构体中也可以包含函数,这些函数称为成员函数。成员函数可以访问结构体的成员变量,方便对结构体进行操作。例如,给
7. 结构体的嵌套
- 定义嵌套结构体
- 结构体可以嵌套其他结构体,用于更复杂的数据组织。例如,定义一个表示日期的结构体和一个表示人的结构体,人的信息中包含出生日期:
struct Date { int year; int month; int day; }; struct Person { std::string name; int age; Date birthDate; };
- 这里
Person
结构体嵌套了Date
结构体,用于表示出生日期。
- 访问嵌套结构体的成员变量
- 可以通过连续使用“.”运算符来访问嵌套结构体的成员变量。例如,对于
Person
结构体的变量person1
:
Person person1; person1.birthDate.year = 2000; person1.birthDate.month = 1; person1.birthDate.day = 1;
- 这样就给
person1
的birthDate
成员(它是一个Date
结构体)中的year
、month
和day
成员变量赋值了。
- 可以通过连续使用“.”运算符来访问嵌套结构体的成员变量。例如,对于
0 条评论
目前还没有评论...