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是一个数组必须先用下标取出某一个学生再用点号访问这个学生的成员。总结今天这篇我们继续练了结构体的几个常见用法结构体变量可以逐个成员赋值。结构体变量可以用{}直接初始化。同类型结构体变量之间可以整体赋值。多个结构体变量可以放进结构体数组。结构体数组常和循环一起使用。结构体数组看起来会比普通数组长一点但思路并不复杂。那这篇就先到这里。如果觉得有帮助记得点赞、关注和收藏谢谢有什么问题欢迎在评论区留言我们一起交流。我们下篇见