C++ 结构体、结构体指针与结构体指针数组详解

时间:2025-04-01 10:38:23

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;
}

总结

  1. 结构体:将不同类型的数据组合成一个新的数据类型
  2. 结构体指针:指向结构体的指针,使用->操作符访问成员
  3. 结构体指针数组:存储多个结构体指针的数组,适合管理大量结构体对象

结构体指针和指针数组在管理大量数据时非常有用,可以减少数据复制的开销,提高程序效率。