43.结构体数组

43.结构体-结构体数组


43.1 知识点

结构体数组的声明和初始化

定义一个名为 Student 的结构体:

struct Student
{
    int age;  // 学生的年龄
    string name;  // 学生的名字

    // 默认构造函数,将 age 初始化为 0,name 初始化为 "123"
    Student()
    {
        age = 0;
        name = "123";
    }

    // 带参数的构造函数,用于初始化学生的 age 和 name
    // @param age 学生的年龄
    // @param name 学生的名字
    Student(int age, string name) : age(age), name(name) {}
} students[5];  // 定义一个包含 5 个 Student 结构体的数组

输出未初始化的 students 数组中第一个元素的年龄,这里使用默认构造函数进行初始化:

cout << students[0].age << endl; // 0
cout << students[0].name << endl; // 123

定义并初始化一个新的结构体数组 arr,使用了多种初始化方式:显式调用构造函数和隐式调用构造函数:

Student arr[5] = { Student(10, "333"), {11, "112"}, {12, "113"}, {13, "114"}, {14, "115"} };

输出 arr 数组中第一个元素的年龄:

cout << arr[0].age << endl; // 10
cout << arr[0].name << endl; // 333

指针和结构体数组

定义一个指向 Student 结构体数组的指针 p,并将其初始化为指向 arr 数组的首地址,遵循指针和一维数组的规则:

Student* p = arr;
// 输出 p 所指向的结构体元素的年龄
cout << p->age << endl;//10
// 输出 p 所指向的结构体元素的名字
cout << p->name << endl;//333
// 将指针 p 指向下一个元素
p++;
// 输出下一个元素的年龄
cout << p->age << endl;//11
// 输出下一个元素的名字
cout << p->name << endl;//112
// 将指针 p 指向前一个元素
p--;
// 输出当前元素(即第一个元素)的年龄,使用数组下标访问元素
cout << p[0].age << endl;//10

43.2 知识点代码

Lesson43_结构体_结构体数组.cpp

#include <iostream>
using namespace std;

// 定义一个名为 Student 的结构体
struct Student
{
    int age;  // 学生的年龄
    string name;  // 学生的名字

    // 默认构造函数,将 age 初始化为 0,name 初始化为 "123"
    Student()
    {
        age = 0;
        name = "123";
    }

    // 带参数的构造函数,用于初始化学生的 age 和 name
    // @param age 学生的年龄
    // @param name 学生的名字
    Student(int age, string name) : age(age), name(name) {}

}students[5];  // 定义一个包含 5 个 Student 结构体的数组

int main()
{
    std::cout << "结构体数组\n";

    #pragma region 知识点一 结构体数组的声明和初始化

    // 输出未初始化的 students 数组中第一个元素的年龄,这里使用默认构造函数进行初始化
    cout << students[0].age << endl;//0
    cout << students[0].name << endl;//123

    // 定义并初始化一个新的结构体数组 arr
    // 使用了多种初始化方式:显式调用构造函数和隐式调用构造函数
    Student arr[5] = { Student(10,"333"),{11, "112"},{12, "113"},{13, "114"},{14, "115"} };
    // 输出 arr 数组中第一个元素的年龄
    cout << arr[0].age << endl;//10
    cout << arr[0].name << endl;//333

    #pragma endregion

    #pragma region 知识点二 指针和结构体数组

    // 定义一个指向 Student 结构体数组的指针 p,并将其初始化为指向 arr 数组的首地址
    // 遵循指针和一维数组的规则
    Student* p = arr;
    // 输出 p 所指向的结构体元素的年龄
    cout << p->age << endl;//10
    // 输出 p 所指向的结构体元素的名字
    cout << p->name << endl;//333
    // 将指针 p 指向下一个元素
    p++;
    // 输出下一个元素的年龄
    cout << p->age << endl;//11
    // 输出下一个元素的名字
    cout << p->name << endl;//112
    // 将指针 p 指向前一个元素
    p--;
    // 输出当前元素(即第一个元素)的年龄,使用数组下标访问元素
    cout << p[0].age << endl;//10

    #pragma endregion
}

43.3 练习题

定义一个数组存储10个上节课练习题中描述的小怪兽,每个小怪兽的名字为(小怪兽+数组下标)

举例:小怪兽0,最后打印10个小怪兽的名字+攻击力数值

struct Boss
{
    string name;
    int atk;
} arr[10]; // 全局变量
// 局部变量
// Boss arr[10];

for (int i = 0; i < 10; i++)
{
    arr[i].name = "小怪兽" + to_string(i);
    arr[i].atk = 10 + i;

    cout << arr[i].name << "他的攻击力为" << arr[i].atk << endl;
}
// 小怪兽0他的攻击力为10
// 小怪兽1他的攻击力为11
// 小怪兽2他的攻击力为12
// 小怪兽3他的攻击力为13
// 小怪兽4他的攻击力为14
// 小怪兽5他的攻击力为15
// 小怪兽6他的攻击力为16
// 小怪兽7他的攻击力为17
// 小怪兽8他的攻击力为18
// 小怪兽9他的攻击力为19

43.4 练习题代码

Lesson43_练习题.cpp

#include <iostream>
#include <string>
using namespace std;

struct Boss
{
    string name;
    int atk;
}arr[10];//全局变量

int main()
{
    std::cout << "结构体数组 练习题\n";

    #pragma region 练习题

    /*定义一个数组存储10个上节课练习题中描述的小怪兽,每个小怪兽的名字为(小怪兽 + 数组下标)
    举例:小怪兽0,最后打印10个小怪兽的名字 + 攻击力数值*/

    //局部变量
    //Boss arr[10];
    for (int i = 0; i < 10; i++)
    {
        arr[i].name = "小怪兽" + to_string(i);
        arr[i].atk = 10 + i;

        cout << arr[i].name << "他的攻击力为" << arr[i].atk << endl;
    }
    //小怪兽0他的攻击力为10
    //小怪兽1他的攻击力为11
    //小怪兽2他的攻击力为12
    //小怪兽3他的攻击力为13
    //小怪兽4他的攻击力为14
    //小怪兽5他的攻击力为15
    //小怪兽6他的攻击力为16
    //小怪兽7他的攻击力为17
    //小怪兽8他的攻击力为18
    //小怪兽9他的攻击力为19

    #pragma endregion

}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏