C++ 结构体、结构体指针与结构体指针数组详解
1. 结构体 (Struct)
结构体是C++中一种用户自定义的数据类型,它允许你将不同类型的数据组合在一起。
基本用法
// 定义一个结构体
struct Student {
int id; // 学号
string name; // 姓名
float score; // 成绩
};
// 使用结构体
int main() {
// 创建结构体变量
Student stu1;
// 访问结构体成员
stu1.id = 101;
stu1.name = "张三";
stu1.score = 89.5;
// 初始化结构体
Student stu2 = {102, "李四", 92.0};
return 0;
}
2. 结构体指针
结构体指针是指向结构体变量的指针,通过指针可以访问和操作结构体成员。
基本用法
int main() {
Student stu = {103, "王五", 85.5};
// 创建结构体指针
Student* pStu = &stu;
// 通过指针访问成员
// 方法1:使用 -> 操作符
cout << "ID: " << pStu->id << endl;
cout << "Name: " << pStu->name << endl;
// 方法2:先解引用再使用 . 操作符
cout << "Score: " << (*pStu).score << endl;
return 0;
}
3. 结构体指针数组
结构体指针数组是存放多个结构体指针的数组,常用于管理多个结构体对象。
基本用法
int main() {
// 创建几个学生结构体
Student stu1 = {101, "张三", 89.5};
Student stu2 = {102, "李四", 92.0};
Student stu3 = {103, "王五", 85.5};
// 创建结构体指针数组
Student* stuArray[3] = {&stu1, &stu2, &stu3};
// 访问结构体指针数组元素
for(int i = 0; i < 3; i++) {
cout << "学生" << i+1 << ": "
<< stuArray[i]->name
<< ", 成绩: " << stuArray[i]->score << endl;
}
// 动态分配的结构体指针数组
Student** dynamicArray = new Student*[3];
dynamicArray[0] = new Student{104, "赵六", 78.0};
dynamicArray[1] = new Student{105, "钱七", 95.0};
dynamicArray[2] = new Student{106, "孙八", 88.5};
// 使用后记得释放内存
for(int i = 0; i < 3; i++) {
delete dynamicArray[i];
}
delete[] dynamicArray;
return 0;
}
实际应用示例
#include <iostream>
#include <string>
using namespace std;
struct Book {
string title;
string author;
float price;
};
void printBookInfo(const Book* book) {
cout << "《" << book->title << "》"
<< " 作者: " << book->author
<< " 价格: " << book->price << "元" << endl;
}
int main() {
// 创建几个图书结构体
Book book1 = {"C++ Primer", "Stanley Lippman", 128.0};
Book book2 = {"Effective C++", "Scott Meyers", 99.0};
Book book3 = {"Design Patterns", "Erich Gamma", 89.5};
// 创建图书指针数组
Book* library[3] = {&book1, &book2, &book3};
// 打印所有图书信息
cout << "图书馆藏书列表:" << endl;
for(int i = 0; i < 3; i++) {
printBookInfo(library[i]);
}
return 0;
}
总结
- 结构体:将不同类型的数据组合成一个新的数据类型
-
结构体指针:指向结构体的指针,使用
->
操作符访问成员 - 结构体指针数组:存储多个结构体指针的数组,适合管理大量结构体对象
结构体指针和指针数组在管理大量数据时非常有用,可以减少数据复制的开销,提高程序效率。