大家好啊!这里是阳阳的博客,一个正在努力学习技术的大学生。
前面我们把数组和字符串重新梳理了一遍,从这篇开始进入一个新的知识点:结构体。
结构体刚开始看起来格式有点陌生,但它解决的问题很直观:当一堆变量本来就属于同一个事物时,我们可以把它们放到一起管理。
好了,废话不多说,咱们直接开始。
从学生信息开始看问题
假设我们要保存一个学生的信息,包括姓名、年龄和成绩。
如果只保存一个学生,可以这样写:
string name = "Tom"; int age = 18; double score = 92.5;这样写没有问题,变量也很清楚。
但如果要保存三个学生的信息,代码可能会变成这样:
string name1 = "Tom"; int age1 = 18; double score1 = 92.5; string name2 = "Jack"; int age2 = 19; double score2 = 88.0; string name3 = "Lucy"; int age3 = 18; double score3 = 95.0;数据一多,变量就开始散了。我们只能通过变量名里的1、2、3来判断这些信息属于哪个学生。
如果后面再加上学号、班级、性别,变量数量会越来越多,代码也会越来越不好管理。
结构体就是用来解决这类问题的。它可以把一组相关的数据放到一起,比如把一个学生的姓名、年龄和成绩打包成一个整体。
结构体的基本写法
结构体用struct定义。
比如我们想定义一个学生类型,可以这样写:
struct Student { string name; int age; double score; };这里的Student是我们自己起的类型名,表示“学生”这种数据。
大括号里面的:
string name; int age; double score;叫成员变量。可以先简单理解成结构体里面的小变量。
定义好结构体类型以后,就可以创建一个学生变量:
Student stu;这句话和以前写:
int a;其实有点像。
int是系统提供的类型,a是变量名。
Student是我们自己定义的类型,stu是变量名。
所以Student stu;的意思就是:定义一个学生变量stu。
用点号访问结构体成员
有了结构体变量以后,要访问里面的成员,需要加个点号。
比如:
stu.name = "Tom"; stu.age = 18; stu.score = 92.5;输出时也一样:
cout << stu.name << endl; cout << stu.age << endl; cout << stu.score << endl;完整代码如下:
#include <iostream> #include <string> using namespace std; struct Student { string name; int age; double score; }; int main() { Student stu; stu.name = "Tom"; stu.age = 18; stu.score = 92.5; cout << stu.name << endl; cout << stu.age << endl; cout << stu.score << endl; return 0; }这里大家先重点记住两个动作。
定义结构体类型:
struct Student { string name; int age; double score; };使用结构体成员:
stu.name stu.age stu.score点号可以理解成“从这个结构体变量里面取出某个成员”。
结构体像一个资料袋
我觉得结构体可以理解成一个资料袋。
一个学生有很多信息,比如姓名、年龄、成绩、学号。平时这些信息都属于同一个学生,所以放在一个资料袋里会更清楚。
Student stu;就像准备了一个学生资料袋。
stu.name stu.age stu.score就是从这个资料袋里拿出姓名、年龄和成绩。
这种理解对刚开始学结构体的同学会比较友好。先不用急着把结构体和类、对象这些概念放在一起想,现阶段先知道:结构体能把多个相关变量组织成一个整体。
结构体适合描述有多个属性的事物
结构体特别适合描述“一个事物有多个属性”的情况。
比如学生:
姓名、年龄、成绩图书:
书名、作者、价格坐标点:
x 坐标、y 坐标日期:
年、月、日比如坐标点可以这样写:
struct Point { int x; int y; };使用时:
Point p; p.x = 3; p.y = 5;这里的p表示一个点,p.x和p.y分别表示这个点的横坐标和纵坐标。
如果不用结构体,也可以写两个普通变量:
int x = 3; int y = 5;但点一多,变量之间的关系就容易乱。结构体能让代码更清楚,也更接近我们平时理解事物的方式。
刚开始容易写错的地方
结构体最容易漏的地方,是最后的分号。
错误写法:
struct Student { string name; int age; double score; }正确写法:
struct Student { string name; int age; double score; };大括号后面的这个分号一定要写。我刚开始学的时候也经常忘,因为看见大括号结束了,手就自然停了。
还有一个容易混的地方,是类型名和变量名。
Student stu;这里Student是类型名,stu是变量名。
后面访问成员时,用的是变量名:
stu.name不能写成:
Student.name因为Student只是类型,真正保存数据的是stu这个变量。
总结
今天这篇,我们先从概念上认识了结构体。
结构体可以把多个相关变量放到一个整体里。它适合描述一个事物的多个属性,比如学生的姓名、年龄、成绩,图书的书名、作者、价格。
这篇先记住几个点:
用
struct定义结构体类型。结构体里面可以放多个成员变量。
定义结构体变量后,用点号访问成员。
结构体定义结束后要加分号。
结构体适合管理一组相关的数据。
对于刚开始学 C++ 的同学来说,结构体是一个很重要的过渡。前面我们更多处理单个变量、数组和字符串,到了结构体这里,就开始把不同类型的数据组合在一起了。
不用一开始就把所有用法都记住。先理解它为什么要出现,再多敲几遍基础代码,慢慢就会顺起来。
那这篇就先到这里。如果觉得有帮助,记得点赞、关注和收藏,谢谢!😄
有什么问题欢迎在评论区留言,我们一起交流。
我们下篇见~