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

相关推荐
怀旧6665 分钟前
spring boot 项目配置https服务
java·spring boot·后端·学习·个人开发·1024程序员节
小c君tt6 分钟前
MFC中 error C2440错误分析及解决方法
c++·mfc
木向40 分钟前
leetcode92:反转链表||
数据结构·c++·算法·leetcode·链表
阿阿越42 分钟前
算法每日练 -- 双指针篇(持续更新中)
数据结构·c++·算法
hunandede1 小时前
FFmpeg存放压缩后的音视频数据的结构体:AVPacket简介,结构体,函数
c++
infiniteWei1 小时前
【Lucene】原理学习路线
学习·搜索引擎·全文检索·lucene
follycat1 小时前
[极客大挑战 2019]PHP 1
开发语言·学习·网络安全·php
hunandede1 小时前
FFmpeg 4.3 音视频-多路H265监控录放C++开发十三:将AVFrame转换成AVPacket。视频编码,AVPacket 重要函数,结构体成员学习
c++·ffmpeg·音视频
weixin_518285052 小时前
深度学习笔记11-神经网络
笔记·深度学习·神经网络
并不会5 小时前
常见 CSS 选择器用法
前端·css·学习·html·前端开发·css选择器