【教程】C++语言基础学习笔记(十)——结构体

文首标志
写在前面:
如果文章对你有帮助,记得点赞关注加收藏一波,利于以后需要的时候复习,多谢支持!


【C++语言基础学习】系列文章

第一章 《项目与程序结构》
第二章 《数据类型》
第三章 《运算符》
第四章 《流程控制》
第五章 《Vector向量》
第六章 《String字符串》
第七章 《Array数组》
第八章 《函数》
第九章 《指针》
第十章 《结构体》



一、结构体定义

结构体(Struct)是一种自定义的数据类型,可以用于组织和管理多个不同类型的数据成员。在C++中,结构体可以用来定义一个包含多个相关数据的复合数据类型。
结构体的定义通常包含以下几个部分:

  1. 关键字struct标识结构体的开始。
  2. 结构体名称,用来标识这个结构体类型。
  3. 花括号{},括号内是结构体的成员列表。
  4. 每个成员的类型和名称。

语法如下。

struct 结构体名 { 结构体成员列表 };

通过结构体创建变量的方式有三种:

  • struct 结构体名 变量名
  • struct 结构体名 变量名 = { 成员1值,成员2值… }
  • 定义结构体时顺便创建变量

定义的示例如下。

struct Student
{
	// 成员类型

	// 姓名
	string name;
	// 年龄
	int age;
	// 分数
	int score;
};

以上示例创建了一个名叫Student的结构体,并在成员列表中添加了姓名name、年龄age和分数score三个属性。从定义成员列表的方式其实可以看到,成员的组成也是由自定义各种数据类型来实现的。
在已经创建了结构体的前提下,通过结构体创建变量则如下所示。

#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

二、结构体使用

(一)结构体数组

结构体数组是指以结构体作为元素类型的数组。它可以用来同时存储和管理多个结构体对象的集合。通过结构体数组,可以方便地对多个结构体对象进行批量操作。
其语法如下。

struct 结构体名 数组名[元素个数] = {{},{}, ... ,{}}

仍然使用之前定义的Student结构体作为示例。

#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;
	}
}

从代码可以看到,通过数组赋值结构体,可以使得成员赋值更为简略,同时,还可以通过访问数组中元素的属性方式直接修改赋值。

(二)结构体指针

结构体指针是指向结构体类型的指针变量。它可以用来存储和操作结构体对象的地址,通过指针可以方便地访问和修改结构体对象的成员。
以下是简单的示例。

#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

三、结构体嵌套

结构体嵌套是指在一个结构体中包含另一个结构体作为成员。通过结构体嵌套,可以创建更复杂的数据结构,将多个结构体对象组合在一起,形成更复杂的数据类型。
以下是简单的示例。

#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,一个永远在学习中的探索者,关注我,让我们一起进步!

文末标志

  • 16
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值