1. 结构体的定义和使用
结构体用于将不同类型的数据
组合在一起,定义格式如下:
struct Person {
std::string name;
int age;
double height;
};
int main() {
Person p1;
p1.name = "Alice";
p1.age = 20;
p1.height = 1.65;
std::cout << p1.name << " " << p1.age << " " << p1.height << std::endl;
return 0;
}
2. 结构体数组
可以定义结构体类型的数组,批量存储多个结构体对象。
Person people[3] = {
{"Tom", 18, 1.70},
{"Jerry", 19, 1.68},
{"Bob", 21, 1.75}
};
std::cout << people[1].name << std::endl; // 输出Jerry
3. 结构体指针
结构体指针可以指向结构体变量,通过->
访问成员。
Person p = {"Lucy", 22, 1.60};
Person* ptr = &p;
std::cout << ptr->name << " " << ptr->age << std::endl;
ptr->age = 23; // 通过指针修改成员
4. 结构体嵌套结构体
结构体成员可以是另一个结构体,实现更复杂的数据结构。
struct Date {
int year, month, day;
};
struct Student {
std::string name;
Date birthday; // 嵌套Date结构体
};
Student s = {"Mike", {2000, 5, 20}};
std::cout << s.name << " " << s.birthday.year << std::endl;
5. 结构体做函数参数
结构体可以作为参数传递给函数,既可以值传递,也可以指针/引用传递。
值传递:
void printPerson(Person p) {
std::cout << p.name << " " << p.age << std::endl;
}
指针/引用传递(推荐,效率高
):
void updateAge(Person* p, int newAge) {
p->age = newAge;
}
void printPersonRef(const Person& p) {
std::cout << p.name << " " << p.age << std::endl;
}
6. 结构体中使用const
• const成员变量
:C++11起可用,需在构造函数初始化列表赋值
,常用于只读属性
。
• const成员函数
:用于保证成员函数不修改结构体内容。
• const结构体参数/引用
:防止函数修改结构体内容。
示例:
struct Book {
std::string title;
const int id; // 只读成员,需在构造函数初始化
Book(std::string t, int i) : title(t), id(i) {}
void print() const { // const成员函数
std::cout << title << " " << id << std::endl;
}
};
void showBook(const Book& b) { // const引用参数
b.print();
}
总结
• 结构体可组合多种类型数据
,支持数组、指针、嵌套、函数参数等多种用法。
• 推荐用引用或指针
传递结构体参数,提升效率。
• 合理使用const可增强安全性和可读性。