C++ 入门学习经验 15——结构体中:初始化、赋值和结构体数组

📅 2026/7/12 19:20:44 👁️ 阅读次数 📝 编程学习
C++ 入门学习经验 15——结构体中:初始化、赋值和结构体数组

大家好啊!这里是阳阳的博客,一个正在努力学习技术的大学生。

上一篇我们聊了结构体的基本概念,知道了结构体可以把多个相关变量打包成一个整体。

今天这篇继续往下看结构体的几个常用操作:结构体变量怎么初始化、能不能整体赋值,以及多个结构体变量怎么用数组保存。好了,废话不多说,咱们直接开始。


结构体变量的初始化

上一篇我们写过这样的代码:

struct Student { string name; int age; double score; }; Student stu; stu.name = "Tom"; stu.age = 18; stu.score = 92.5;

这种写法很清楚,先定义结构体变量,再一个成员一个成员地赋值。

如果想写得更紧凑一点,也可以在定义变量时直接初始化:

Student stu = {"Tom", 18, 92.5};

这里的顺序要和结构体里成员出现的顺序对应。

结构体定义是:

struct Student { string name; int age; double score; };

所以初始化时:

{"Tom", 18, 92.5}

分别对应:

name -> "Tom" age -> 18 score -> 92.5

完整代码如下:

#include <iostream> #include <string> using namespace std; struct Student { string name; int age; double score; }; int main() { Student stu = {"Tom", 18, 92.5}; cout << stu.name << endl; cout << stu.age << endl; cout << stu.score << endl; return 0; }

结构体变量可以整体赋值

结构体还有一个挺方便的地方:同类型的结构体变量之间可以直接赋值。

比如:

Student a = {"Tom", 18, 92.5}; Student b; b = a;

这表示把a里面的所有成员复制给b

完整示例:

#include <iostream> #include <string> using namespace std; struct Student { string name; int age; double score; }; int main() { Student a = {"Tom", 18, 92.5}; Student b; b = a; cout << b.name << endl; cout << b.age << endl; cout << b.score << endl; return 0; }

输出结果和a的内容一样。

这里可以把结构体变量理解成一个资料袋。b = a;就像把a资料袋里的姓名、年龄、成绩都复制一份,放进b这个资料袋里。

这个地方和数组有点不一样。普通数组不能直接这样整体赋值:

int a[3] = {1, 2, 3}; int b[3]; b = a; // 错误

但结构体变量可以直接赋值,只要它们是同一种结构体类型。


结构体数组:保存一组学生

如果只保存一个学生,用一个结构体变量就够了。

但如果要保存多个学生,就可以用结构体数组。

比如:

Student stu[3];

这表示定义了一个数组,里面有 3 个元素,每个元素都是一个Student类型。

可以这样赋值:

stu[0] = {"Tom", 18, 92.5}; stu[1] = {"Jack", 19, 88.0}; stu[2] = {"Lucy", 18, 95.0};

访问时也很自然:

cout << stu[0].name << endl; cout << stu[1].score << endl;

这里可以拆开看:

stu[0]

表示数组里的第一个学生。

stu[0].name

表示第一个学生的姓名。

完整代码如下:

#include <iostream> #include <string> using namespace std; struct Student { string name; int age; double score; }; int main() { Student stu[3] = { {"Tom", 18, 92.5}, {"Jack", 19, 88.0}, {"Lucy", 18, 95.0} }; for(int i = 0; i < 3; i++) { cout << stu[i].name << " "; cout << stu[i].age << " "; cout << stu[i].score << endl; } return 0; }

结构体数组很适合保存一组“有多个属性的数据”。

以前我们用数组保存成绩:

int score[3];

它只能保存一组整数。

现在用结构体数组保存学生:

Student stu[3];

每个学生里面都有姓名、年龄、成绩。这样数据组织起来会清楚很多。


用结构体数组找最高分

结构体数组经常会和循环一起使用。比如现在有 3 个学生,想找出成绩最高的学生。

代码可以这样写:

#include <iostream> #include <string> using namespace std; struct Student { string name; int age; double score; }; int main() { Student stu[3] = { {"Tom", 18, 92.5}, {"Jack", 19, 88.0}, {"Lucy", 18, 95.0} }; int index = 0; for(int i = 1; i < 3; i++) { if(stu[i].score > stu[index].score) { index = i; } } cout << stu[index].name << " "; cout << stu[index].score << endl; return 0; }

这里的index用来记录当前最高分学生的位置。

一开始先认为第一个学生最高:

int index = 0;

然后从第二个学生开始比较。如果发现stu[i].score更高,就更新index

这道题其实和数组里找最大值很像,只不过以前比较的是:

a[i]

现在比较的是:

stu[i].score

比较的是每个结构体里的某个成员。


需要注意的地方

结构体数组刚开始最容易混的是点号和下标的顺序。

正确写法是:

stu[i].name

它表示第i个学生的姓名。

有些同学可能会写成:

stu.name[i]

这样就不对了,因为stu是一个数组,必须先用下标取出某一个学生,再用点号访问这个学生的成员。


总结

今天这篇我们继续练了结构体的几个常见用法:

  1. 结构体变量可以逐个成员赋值。

  2. 结构体变量可以用{}直接初始化。

  3. 同类型结构体变量之间可以整体赋值。

  4. 多个结构体变量可以放进结构体数组。

  5. 结构体数组常和循环一起使用。

结构体数组看起来会比普通数组长一点,但思路并不复杂。

那这篇就先到这里。如果觉得有帮助,记得点赞、关注和收藏,谢谢!😄

有什么问题欢迎在评论区留言,我们一起交流。

我们下篇见~