目录

  1. 结构体概述
  2. 结构体的声明与定义
  3. 结构体成员访问
  4. 结构体与类的区别
  5. 结构体的初始化
  6. 嵌套结构体
  7. 结构体作为函数参数和返回值
  8. 参考资料

1. 结构体概述

结构体(struct)是一种用户自定义的数据类型,用于将多个相关数据组合在一起,形成一个整体。结构体中的每个数据称为成员,它们可以具有不同的数据类型。结构体常用于描述具有相同属性的一组数据,如表示一个“学生”的姓名、年龄和成绩等。


2. 结构体的声明与定义

结构体的声明和定义语法如下:

struct 结构体名 {
    数据类型 成员1;
    数据类型 成员2;
    // 更多成员...
};

示例:

#include <iostream>
using namespace std;

struct Student {
    string name;   // 姓名
    int age;       // 年龄
    double score;  // 成绩
};

int main() {
    // 定义一个 Student 类型的变量
    Student s1;
    
    // 通过成员访问赋值
    s1.name = "张三";
    s1.age = 20;
    s1.score = 88.5;
    
    // 输出学生信息
    cout << "姓名: " << s1.name << endl;
    cout << "年龄: " << s1.age << endl;
    cout << "成绩: " << s1.score << endl;
    
    return 0;
}


3. 结构体成员访问

结构体的成员可以使用点操作符(.)来访问。如果结构体变量的地址已知,可以使用指针和箭头操作符(->)来访问成员。

示例:

Student s1 = {"李四", 22, 91.2};
Student* ptr = &s1;

cout << "姓名: " << s1.name << endl;      // 直接访问
cout << "年龄: " << ptr->age << endl;       // 使用指针访问


4. 结构体与类的区别

在 C++ 中,结构体和类非常相似,主要区别在于默认的访问控制权限:

  • 结构体:默认成员权限为 public
  • :默认成员权限为 private

例如:

struct MyStruct {
    int x;  // 默认 public
};

class MyClass {
    int x;  // 默认 private
};

可以通过在类中使用 publicprivateprotected 显式指定访问权限,使得结构体和类在语义上趋于一致。


5. 结构体的初始化

结构体可以在声明时进行初始化。C++11 后支持列表初始化:

Student s1 = {"王五", 19, 85.0};  // 使用初始化列表

也可以分别对各个成员赋值:

Student s2;
s2.name = "赵六";
s2.age = 21;
s2.score = 90.0;


6. 嵌套结构体

结构体可以嵌套,即在一个结构体中定义另一个结构体,用于描述更复杂的数据结构。

示例:

struct Date {
    int year;
    int month;
    int day;
};

struct Person {
    string name;
    Date birthday;  // 嵌套结构体
};

int main() {
    Person p = {"孙七", {1995, 12, 5}};
    cout << "姓名: " << p.name << endl;
    cout << "生日: " << p.birthday.year << "-" << p.birthday.month << "-" << p.birthday.day << endl;
    return 0;
}


7. 结构体作为函数参数和返回值

结构体可以作为函数参数传递,可以通过值传递、引用传递或指针传递,也可以作为函数返回值返回。

示例:传递结构体引用:

#include <iostream>
using namespace std;

struct Student {
    string name;
    int age;
};

void printStudent(const Student &s) {
    cout << "姓名: " << s.name << ", 年龄: " << s.age << endl;
}

int main() {
    Student s = {"钱八", 23};
    printStudent(s);
    return 0;
}


8. 参考资料


总结

结构体是 C++ 中将相关数据组合在一起的重要工具,它通过为变量创建一个整体数据结构,帮助程序员更直观地组织和管理数据。通过理解结构体的声明、初始化、成员访问以及它与类的区别,可以更高效地设计和实现数据模型。结构体在实际编程中广泛应用于描述复杂数据类型、数据传递和面向对象设计等场景。