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


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


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

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


文章目录


一、结构体定义

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

结构体的定义通常包含以下几个部分:

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

语法如下。

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

相关推荐
以卿a38 分钟前
C++ 模板初阶
开发语言·c++
StickToForever4 小时前
第4章 信息系统架构(五)
经验分享·笔记·学习·职场和发展
黑不溜秋的6 小时前
C++ 设计模式 - 策略模式
c++·设计模式·策略模式
leegong231117 小时前
学习PostgreSQL专家认证
数据库·学习·postgresql
敲敲敲-敲代码7 小时前
【SQL实验】触发器
数据库·笔记·sql
Moonnnn.8 小时前
51单片机学习——动态数码管显示
笔记·嵌入式硬件·学习·51单片机
Dream it possible!8 小时前
LeetCode 热题 100_在排序数组中查找元素的第一个和最后一个位置(65_34_中等_C++)(二分查找)(一次二分查找+挨个搜索;两次二分查找)
c++·算法·leetcode
南宫生8 小时前
力扣每日一题【算法学习day.132】
java·学习·算法·leetcode
柠石榴8 小时前
【练习】【回溯No.1】力扣 77. 组合
c++·算法·leetcode·回溯
王老师青少年编程9 小时前
【GESP C++八级考试考点详细解读】
数据结构·c++·算法·gesp·csp·信奥赛