写在前面:
如果文章对你有帮助,记得点赞关注加收藏一波,利于以后需要的时候复习,多谢支持!
【C++语言基础学习】系列文章
第一章 《项目与程序结构》
第二章 《数据类型》
第三章 《运算符》
第四章 《流程控制》
第五章 《Vector向量》
第六章 《String字符串》
第七章 《Array数组》
第八章 《函数》
第九章 《指针》
第十章 《结构体》
文章目录
一、结构体定义
结构体(Struct)是一种自定义的数据类型,可以用于组织和管理多个不同类型的数据成员。在C++中,结构体可以用来定义一个包含多个相关数据的复合数据类型。
结构体的定义通常包含以下几个部分:
- 关键字
struct
标识结构体的开始。 - 结构体名称,用来标识这个结构体类型。
- 花括号
{}
,括号内是结构体的成员列表。 - 每个成员的类型和名称。
语法如下。
cpp
struct 结构体名 { 结构体成员列表 };
通过结构体创建变量的方式有三种:
struct
结构体名 变量名struct
结构体名 变量名 = { 成员1值,成员2值... }- 定义结构体时顺便创建变量
定义的示例如下。
cpp
struct Student
{
// 成员类型
// 姓名
string name;
// 年龄
int age;
// 分数
int score;
};
以上示例创建了一个名叫Student
的结构体,并在成员列表中添加了姓名name
、年龄age
和分数score
三个属性。从定义成员列表的方式其实可以看到,成员的组成也是由自定义各种数据类型来实现的。
在已经创建了结构体的前提下,通过结构体创建变量则如下所示。
cpp
#include "test.h"
#include <iostream>
#include <string>
using namespace std;
void test::Test()
{
struct Student
{
// 成员类型
// 姓名
string name;
// 年龄
int age;
// 分数
int score;
}s3;//第三种方式
// 第一种方式
struct Student s1;
s1.name = "小张";
s1.age = 18;
s1.score = 100;
cout << " 姓名:" << s1.name << " 年龄:" << s1.age << " 分数:" << s1.score << endl;
// 第二种方式
struct Student s2 = { "小李",19,80 };
cout << " 姓名:" << s2.name << " 年龄:" << s2.age << " 分数:" << s2.score << endl;
// 第三种方式
s3.name = "小王";
s3.age = 20;
s3.score = 60;
cout << " 姓名:" << s3.name << " 年龄:" << s3.age << " 分数:" << s3.score << endl;
}
阅读以上代码:第一种方式是在声明结构体建立一个变量s1
后,通过成员运算符.
访问结构体Student
的各个属性(成员),然后逐个赋值;第二种方式是在声明建立变量s2
后直接在花括号{}
内依次赋值;第三种方法则是在结构体定义后紧跟着建立一个变量s3
,接着再通过与第一种方式相同的操作依次访问成员进行赋值。
但在实际应用中,通常使用第一种和第二种方式较多,因为第三种定义方式变量定义和赋值语句很可能相隔太远,可读性较差,一般不进行使用。
示例代码返回结果如下。
姓名:小张 年龄:18 分数:100
姓名:小李 年龄:19 分数:80
姓名:小王 年龄:20 分数:60
二、结构体使用
(一)结构体数组
结构体数组是指以结构体作为元素类型的数组。它可以用来同时存储和管理多个结构体对象的集合。通过结构体数组,可以方便地对多个结构体对象进行批量操作。
其语法如下。
cpp
struct 结构体名 数组名[元素个数] = {{},{}, ... ,{}}
仍然使用之前定义的Student
结构体作为示例。
cpp
#include "test.h"
#include <iostream>
#include <string>
using namespace std;
void test::Test()
{
struct Student
{
string name;
int age;
int score;
};
// 创建结构体数组
struct Student arr[3] =
{
{"小张",18,100},
{"小李",19,80},
{"小王",20,60}
};
// 给结构体数组的元素赋值
arr[2].score = 70;
// 遍历打印结构体数据
for (int i = 0; i < 3; i++)
{
cout << " 姓名:" << arr[i].name
<< " 年龄:" << arr[i].age
<< " 分数:" << arr[i].score << endl;
}
}
从代码可以看到,通过数组赋值结构体,可以使得成员赋值更为简略,同时,还可以通过访问数组中元素的属性方式直接修改赋值。
(二)结构体指针
结构体指针是指向结构体类型的指针变量。它可以用来存储和操作结构体对象的地址,通过指针可以方便地访问和修改结构体对象的成员。
以下是简单的示例。
cpp
#include "test.h"
#include <iostream>
#include <string>
using namespace std;
void test::Test()
{
struct Student
{
string name;
int age;
int score;
};
Student s = { "小张",18,100 };
Student* p = &s;
cout << " 姓名:" << p->name << " 年龄:" << p->age << " 分数:" << p->score << endl;
}
从示例代码中,可以看到指针的类型必须和结构体创建的类型相同,而不能用普通的类似整型、浮点型的数据类型来作为指针的数据类型。
值得注意的是,在C++中,一旦定义了相应的结构体数据类型,在定义变量时可以不声明结构体关键字struct
,直接使用结构体创建的数据类型Student
即可。还有一点是,在访问结构体的属性时,这里使用的成员操作符是通过箭头->
来访问指针的属性。
返回结果如下。
姓名:小张 年龄:18 分数:100
三、结构体嵌套
结构体嵌套是指在一个结构体中包含另一个结构体作为成员。通过结构体嵌套,可以创建更复杂的数据结构,将多个结构体对象组合在一起,形成更复杂的数据类型。
以下是简单的示例。
cpp
#include "test.h"
#include <iostream>
#include <string>
using namespace std;
void test::Test()
{
struct student
{
string name;
int age;
int score;
};
struct teacher
{
string name;// 教师姓名
int age;// 教师年龄
student stu;// 辅导的学生
};
teacher t;
t.name = "老刘";
t.age = 50;
t.stu.name = "小张";
t.stu.age = 18;
t.stu.score = 100;
cout << " 老师姓名:" << t.name << endl;
cout << " 老师年龄:" << t.age << endl;
cout << " 老师辅导的学生姓名:" << t.stu.name << endl;
cout << " 学生年龄:" << t.stu.age << endl;
cout << " 学生成绩:" << t.stu.score << endl;
}
根据以上代码,只有首先创建一个student
结构体,在创建teacher
结构体内的嵌套属性时才可以访问。一旦结构体作为另一个结构体的属性创建完成,就可以作为那个结构体的属性进行访问。
返回结果如下。
老师姓名:老刘
老师年龄:50
老师辅导的学生姓名:小张
学生年龄:18
学生成绩:100
我是EC,一个永远在学习中的探索者,关注我,让我们一起进步!