C++中定义结构体需使用struct关键字,后跟结构体名和花括号内的成员变量,每个成员以分号结束,整体定义以分号结尾;struct默认成员为public,常用于数据聚合,如Point { int x; int y; }; 可声明变量并用点运算符访问成员,支持多种初始化方式,适用于数据记录、几何对象、函数参数返回值、复杂数据结构节点及配置信息等场景。

C++中定义结构体,核心就是
struct
struct
要定义一个C++结构体,你需要使用
struct
一个最基础的例子是这样的:
struct Point {
int x; // x坐标
int y; // y坐标
}; // 别忘了这里的分号!在这个例子中,我们定义了一个名为
Point
x
y
int
double
立即学习“C++免费学习笔记(深入)”;
Point p1; // 声明一个Point类型的变量p1
p1.x = 10; // 访问并赋值给p1的x成员
p1.y = 20; // 访问并赋值给p1的y成员
Point p2 = {30, 40}; // 声明并初始化一个Point类型的变量p2 (C++11统一初始化)
Point p3 = {.x = 50, .y = 60}; // C++20的指定初始化器,更清晰结构体成员可以是任何有效的C++数据类型,包括其他结构体、数组,甚至是指针。这种灵活性使得结构体成为构建复杂数据结构的基石。
说起来,我初学C++的时候,总觉得
struct
class
struct
class
struct
public
看这个例子:
struct MyStruct {
int public_data; // 默认是public
private:
int private_data; // 明确声明为private
};
class MyClass {
int private_data; // 默认是private
public:
int public_data; // 明确声明为public
};从语法上讲,你可以在
struct
class
struct
class
Point
Car
start()
accelerate()
初始化和访问结构体成员是日常编码中非常频繁的操作。初始化结构体变量有几种常见方式,理解它们能让你的代码更健壮、更清晰。
最传统的C风格初始化是按成员顺序提供值:
struct Student {
int id;
char name[20];
float score;
};
Student s1 = {101, "Alice", 95.5f}; // 成员按顺序初始化这种方式要求你严格按照结构体成员的声明顺序来提供值,一旦顺序错乱,或者成员类型不匹配,就可能导致意想不到的错误。
C++11引入了统一初始化(brace initialization),它更加安全和灵活,可以用于所有类型的初始化:
Student s2 {102, "Bob", 88.0f}; // 统一初始化如果你的结构体成员有默认构造函数,或者你只想初始化部分成员,剩余的成员会被默认初始化(例如,
int
struct Config {
int timeout_ms;
bool enable_logging;
std::string log_file_path;
};
Config default_cfg {}; // 所有成员都会被默认初始化 (timeout_ms=0, enable_logging=false, log_file_path="")
Config custom_cfg {5000, true}; // timeout_ms=5000, enable_logging=true, log_file_path=""C++20还引入了指定初始化器(designated initializers),这让初始化变得更加明确和不易出错,特别是在结构体成员较多时:
struct Color {
int r, g, b;
};
Color red = {.r = 255, .g = 0, .b = 0}; // 明确指定初始化哪个成员
Color blue = {.b = 255, .r = 0}; // 可以不按顺序,未指定的会默认初始化为0至于访问成员,你主要会用到点运算符(
.
->
Point p = {10, 20};
std::cout << "p.x: " << p.x << ", p.y: " << p.y << std::endl; // 使用点运算符
Point* ptr_p = &p;
std::cout << "ptr_p->x: " << ptr_p->x << ", ptr_p->y: " << ptr_p->y << std::endl; // 使用箭头运算符搞清楚这些,你的代码在处理结构体时可就清晰多了。
别小看这个小小的
struct
数据记录(Records):这是最常见的用途。当你需要表示一个具有多个相关属性的实体时,
struct
struct
struct Product {
int id;
std::string name;
double price;
int stock_quantity;
};几何或数学对象:像
Point
Vector
Rectangle
struct
struct Vector3D {
float x, y, z;
};函数参数和返回值:有时候一个函数需要接收多个参数,或者需要返回多个值。如果参数或返回值数量不多,你可以直接列出。但如果数量一多,或者这些参数/返回值逻辑上是一个整体,那么把它们封装到一个
struct
struct CalculationResult {
double sum;
double average;
double max_val;
};
CalculationResult analyze_data(const std::vector<double>& data) {
// ... 计算并返回
return {s, avg, mx};
}链表、树等复杂数据结构的节点:在实现链表、二叉树、图等数据结构时,每个节点通常需要包含数据本身以及指向下一个(或多个)节点的指针。
struct
struct Node {
int data;
Node* next; // 指向下一个节点的指针
};
// 或者用于二叉树
struct TreeNode {
int value;
TreeNode* left;
TreeNode* right;
};配置信息(Configuration):程序启动时需要读取的各种配置参数,比如数据库连接信息、网络端口、日志级别等,都可以组织在一个
struct
struct AppConfig {
std::string db_host;
int db_port;
std::string log_level;
bool enable_debug_mode;
};总的来说,每当你的目标是纯粹地将相关数据聚合在一起,形成一个有意义的整体时,
struct
以上就是C++结构体定义语法 struct关键字基础用法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号