C++中的结构体初始化的多种方式
在 C++ 中,结构体(struct
)是用于组合多个变量(可以是不同类型)的数据类型。以下是创建结构体并赋值的基本方法:
1. 定义结构体并赋值
示例代码:
#include <iostream>
#include <string>
using namespace std;
// 定义结构体
struct Person {
string name;
int age;
float height;
};
int main() {
// 初始化并赋值方式 1:列表初始化
Person person1 = {"Alice", 25, 5.6};
// 初始化并赋值方式 2:分步赋值
Person person2;
person2.name = "Bob";
person2.age = 30;
person2.height = 6.0;
// 输出结果
cout << "Person 1: " << person1.name << ", " << person1.age << " years old, " << person1.height << " ft" << endl;
cout << "Person 2: " << person2.name << ", " << person2.age << " years old, " << person2.height << " ft" << endl;
return 0;
}
2. 用构造函数赋值(C++11 起支持)
在 C++ 中,结构体可以像类一样定义构造函数,用来更方便地初始化。
示例代码:
#include <iostream>
#include <string>
using namespace std;
// 定义结构体
struct Person {
string name;
int age;
float height;
// 构造函数
Person(string n, int a, float h) : name(n), age(a), height(h) {}
};
int main() {
// 使用构造函数初始化
Person person1("Charlie", 28, 5.9);
// 输出结果
cout << "Person: " << person1.name << ", " << person1.age << " years old, " << person1.height << " ft" << endl;
return 0;
}
3. 动态分配结构体
如果需要在堆上动态分配结构体,可以使用 new
关键字。
示例代码:
#include <iostream>
#include <string>
using namespace std;
// 定义结构体
struct Person {
string name;
int age;
float height;
};
int main() {
// 动态分配
Person* person = new Person{"Daisy", 22, 5.7};
// 输出结果
cout << "Person: " << person->name << ", " << person->age << " years old, " << person->height << " ft" << endl;
// 释放内存
delete person;
return 0;
}
4. C++20 起支持聚合初始化增强
在 C++20 中,可以使用设计器语法(designated initializers
)来更明确地初始化结构体的成员。
示例代码:
#include <iostream>
#include <string>
using namespace std;
// 定义结构体
struct Person {
string name;
int age;
float height;
};
int main() {
// 使用 C++20 的设计器语法
Person person1 = {.name = "Eve", .age = 26, .height = 5.8};
// 输出结果
cout << "Person: " << person1.name << ", " << person1.age << " years old, " << person1.height << " ft" << endl;
return 0;
}
总结:
- 可以通过直接赋值或列表初始化对结构体赋值。
- 使用构造函数可以使代码更清晰。
- 动态分配适用于需要灵活管理内存的场景。
- C++20 的设计器语法增强了可读性。
本文来自博客园,作者:海_纳百川,转载请注明原文链接:https://www.cnblogs.com/chentiao/p/18564015,如有侵权联系删除
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义