📘结构体入门

2026-08-29
⭐⭐ GESP 4级

📖概念讲解

【考点 · 4级】结构体(struct)——自定义数据类型,把多个不同类型的变量打包成一个整体。

🔹 定义方式:struct 名称 { 成员变量; }; 注意结尾分号不能丢!

🔹 访问成员:用 . 操作符,如 stu.name、stu.score。

🔹 初始化:可以用花括号直接赋值,也可以逐个成员赋值。

⚡ 易错点:结构体定义末尾的 ; 不能省略!这是考试中经典扣分点。还有,结构体变量之间可以直接用 = 赋值(整体拷贝),不需要逐个复制成员。

💻代码示例

1#include <iostream>
2using namespace std;
3
4// 定义结构体:把学生的姓名、年龄、分数打包
5struct Student { // struct 关键字 + 类型名
6 string name; // 姓名
7 int age; // 年龄
8 double score; // 分数(double 存小数)
9}; // ⚠️ 这里的分号不能丢!
10
11int main() {
12 Student s1; // 声明一个 Student 类型的变量
13 s1.name = "小明"; // 用 . 访问并赋值
14 s1.age = 14;
15 s1.score = 95.5;
16
17 // 花括号初始化(C++11 及以上)
18 Student s2 = {"小红", 13, 98.0}; // 按成员顺序初始化
19
20 cout << s1.name << " " << s1.score << endl;
21 cout << s2.name << " " << s2.score << endl;
22 return 0;
23}
24// 输出: 小明 95.5
25// 小红 98

🧩互动小测

❓ 以下结构体定义,哪里有问题?

❓ 关于结构体变量,以下哪个说法正确?

❓ struct S{ int a; char b; }; 定义了几个变量?

🏋️动手练一练

📝 编程练习

定义一个 Student 结构体(包含 name: string, score: int)。
输入 n(1 ≤ n ≤ 100),然后输入 n 个学生的姓名和分数。
按分数从高到低排序,输出排序后的姓名和分数。

提示:用结构体数组存储,用冒泡排序或选择排序按 score 排序。注意交换整个结构体变量而不是单个成员。
参考答案:
#include <iostream>
using namespace std;

struct Student {
    string name;
    int score;
};

int main() {
    int n;
    cin >> n;
    Student s[101];
    for (int i = 0; i < n; i++)
        cin >> s[i].name >> s[i].score;
    // 冒泡排序(降序)
    for (int i = 0; i < n - 1; i++)
        for (int j = 0; j < n - 1 - i; j++)
            if (s[j].score < s[j+1].score) {
                Student t = s[j];   // 交换整个结构体
                s[j] = s[j+1];
                s[j+1] = t;
            }
    for (int i = 0; i < n; i++)
        cout << s[i].name << " " << s[i].score << endl;
    return 0;
}

要点:结构体变量之间可以直接用 = 赋值,所以交换时定义一个临时 Student 变量即可,不需要逐个成员交换。

📝易错点提醒

学完这个知识点后点一下