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