C++ 结构体详解:定义、初始化、指针、函数参数与局限性
什么是 C++ 结构体?
结构体 是 C++ 可将不同数据类型的元素组合存储的数据结构。在 C++ 中,结构体是用户自定义数据类型,将不同类型的数据项归为单一类型。
例如:需存储某人姓名、国籍、年龄。可分别创建 name、citizenship、age 变量分别存储。但若未来需存储多人信息,不同个体的变量会成倍增加(name1、citizenship1、age1…)。使用结构体可避免此问题。
本教程你将学到:
- 什么是 C++ 结构体
- 何时使用结构体
- C++ 结构体初始化
- 创建结构体实例
- 访问结构体成员
- 结构体指针
- 结构体作为函数参数
- C++ 结构体的局限性
何时使用结构体?
使用结构体的理由:
- 需将不同数据类型的元素归为单一类型存储。
- C++ 结构体是值类型而非引用类型。创建后不打算修改数据时适用。
C++ 结构体初始化
创建结构体用 struct 关键字加标识符,标识符成为结构体名。语法:
struct struct_name { // struct members }
结构体成员置于大括号内,可属于不同数据类型。
示例:
struct Person { char name[30]; int citizenship; int age; }
上例中 Person 结构体有三个成员:name、citizenship、age。一个成员为 char 类型,其余两个为整型。结构体创建时不分配内存,只有添加变量时才分配。
创建结构体实例
上例创建了 Person 结构体,可按如下方式创建结构体变量:
Person p;
p 是 Person 类型的结构体变量,可用它访问结构体成员。
访问结构体成员
用结构体实例和点运算符(.)访问成员。如访问 Person 的 age 成员:
p.age = 27;
通过实例 p 访问 age 成员并赋值 27。
示例 1
#include <iostream> using namespace std; struct Person { int citizenship; int age; }; int main(void) { struct Person p; p.citizenship = 1; p.age = 27; cout << "Person citizenship: " << p.citizenship << endl; cout << "Person age: " << p.age << endl; return 0; }
输出:

代码截图:

结构体指针
可创建指向结构体的指针,类似于指向 int、float、double 等基本类型的指针。指针存储内存地址。
示例 2
#include <iostream> using namespace std; struct Length { int meters; float centimeters; }; int main() { Length *ptr, l; ptr = &l; cout << "Enter meters: "; cin >> (*ptr).meters; cout << "Enter centimeters: "; cin >> (*ptr).centimeters; cout << "Length = " << (*ptr).meters << " meters " << (*ptr).centimeters << " centimeters"; return 0; }
输出:

代码截图:

结构体作为函数参数
可将结构体作为参数传递给函数,方式同普通参数。结构体变量也可传给函数。典型场景如显示结构体成员值。演示如下:
示例 3
#include<iostream> using namespace std; struct Person { int citizenship; int age; }; void func(struct Person p); int main() { struct Person p; p.citizenship = 1; p.age = 27; func(p); return 0; } void func(struct Person p) { cout << " Person citizenship: " << p.citizenship<<endl; cout << " Person age: " << p.age; }
输出:

代码截图:

C++ 结构体的局限性
- 结构体数据类型不能像内置类型那样处理。
- 不能对结构体变量使用 +、- 等运算符。
- 结构体不支持数据隐藏。成员可被任意作用域的函数访问。
- 结构体内不能声明静态成员。
- 结构体内不能定义构造函数。
总结
- 结构体存储不同类型的数据元素;数组存储相同类型元素。
- 数据元素预期不变时适用结构体。
- 用点运算符(.)访问结构体成员。
- 必须创建结构体实例。
- 用
struct关键字创建结构体。 - 结构体指针创建方式同基本类型指针。
- 结构体可像普通参数一样传递给函数。
C语言
- 精通C语言结构体与指针:实战指南
- C++ 运算符全解析:类型、示例与示例程序
- C++ do-while 循环详解:语法、实战示例与嵌套循环
- 掌握 C++ switch-case:语法、用法与实战示例
- C++ 动态数组分配实战指南:new/delete、初始化、扩容与内存管理
- C++ 指针精通:核心概念、代码示例与实战应用
- C++ char 类型完全指南:声明、ASCII 码、输入输出与字符串转换
- C++ 运算符重载实战指南:语法、方法、限制与代码示例
- C++ std::map 完全指南:键值对容器、核心操作与实战代码
- 掌握 C++ std::list:语法、函数与实战示例
- C++ 函数详解:从声明到调用的实战指南
- C++ Struct 与 Class 核心差异、语法及最佳实践