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;
}
总结
- 结构体:将不同类型的数据组合成一个新的数据类型
- 结构体指针:指向结构体的指针,使用
->
操作符访问成员 - 结构体指针数组:存储多个结构体指针的数组,适合管理大量结构体对象
结构体指针和指针数组在管理大量数据时非常有用,可以减少数据复制的开销,提高程序效率。