当前位置: 首页 > news >正文

C++ 结构体(struct)

结构体的定义与声明

在C++中,结构体(struct)是一种用户自定义的数据类型,用于将不同类型的数据组合成一个单一的复合类型。结构体的定义方式如下:

struct StructName { type1 member1; type2 member2; // 更多成员... };

例如:

struct Person { std::string name; int age; float height; };

结构体的初始化

结构体可以通过多种方式初始化:

  1. 直接初始化
Person p1 = {"Alice", 25, 1.65f};
  1. 成员逐个赋值
Person p2; p2.name = "Bob"; p2.age = 30; p2.height = 1.75f;
  1. C++11统一初始化
Person p3 {"Charlie", 35, 1.80f};

结构体的访问

结构体的成员通过点运算符(.)访问:

std::cout << p1.name << " is " << p1.age << " years old." << std::endl;

如果结构体变量是指针,则使用箭头运算符(->)访问:

Person* ptr = &p1; std::cout << ptr->name << std::endl;

结构体与类的区别

在C++中,structclass非常相似,主要区别在于默认访问权限:

  • struct的成员默认是public
  • class的成员默认是private

例如:

struct ExampleStruct { int x; // 默认为 public }; class ExampleClass { int x; // 默认为 private };

结构体的嵌套

结构体可以嵌套其他结构体或类:

struct Address { std::string city; std::string street; }; struct Employee { std::string name; Address address; };

结构体与函数

结构体可以作为函数的参数或返回值:

void printPerson(const Person& p) { std::cout << p.name << ", " << p.age << std::endl; } Person createPerson(std::string name, int age, float height) { return {name, age, height}; }

结构体的大小与内存对齐

结构体的大小由其成员的总大小和内存对齐决定。可以使用sizeof运算符获取结构体的大小:

std::cout << sizeof(Person) << std::endl;

内存对齐可以通过#pragma packalignas关键字调整:

#pragma pack(1) // 取消对齐 struct PackedStruct { char c; int i; }; #pragma pack() // 恢复默认对齐

结构体的高级特性

C++11及更高版本为结构体引入了更多特性:

  1. 成员函数: 结构体可以包含成员函数:
struct Point { int x, y; void print() { std::cout << "(" << x << ", " << y << ")" << std::endl; } };
  1. 构造函数: 结构体可以定义构造函数:
struct Point { int x, y; Point(int x, int y) : x(x), y(y) {} };
  1. 运算符重载: 结构体可以重载运算符:
struct Point { int x, y; Point operator+(const Point& other) { return {x + other.x, y + other.y}; } };

结构体的应用场景

结构体常用于以下场景:

  • 组织相关数据(如坐标、配置参数)。
  • 作为轻量级的数据容器(与类相比)。
  • 与C语言兼容的数据结构(如网络协议、文件格式)。
http://www.cnnetsun.cn/news/543997.html

相关文章:

  • STM32驱动8位并口LCD显示屏操作指南
  • 论文查重优化的现代方法:六款AI工具实现高效文本改写的操作步骤
  • 通过AI技术提升论文原创性:六大智能工具改写文本的实用技巧解析
  • 借助10款AI论文写作工具,高效复现数学建模领域的优秀论文,同时通过智能改写提升内容质量。
  • 提升论文原创性的有效方法:六款AI工具改写文本的实用操作指南
  • 学术查重未通过?五个关键方法帮你快速降低重复比例。
  • 亲测好用9个AI论文软件,助你搞定研究生毕业论文!
  • 论文查重不合格?五个高效步骤帮你快速调整文本。
  • AO3镜像站终极部署指南:3步实现稳定访问同人作品库
  • 论文写作效率翻倍:9款AI辅助工具深度体验评测
  • node.js基于vue的某电梯厂固定资产管理系统excel数据导入 可视化_vfa9327d_
  • 通信原理篇---数字通信系统与模拟通信系统
  • 3分钟搞定:WenQuanYi Micro Hei免费中文字体完整使用指南
  • [Linux外设驱动详解]8. GPIO子系统
  • 3.41 运筹规划问题入门:线性规划、整数规划、混合整数规划详解
  • 翻转内容的两种办法
  • Sign-Sacker签名掠夺者:终极数字签名复制技术完整指南
  • 3.32 视觉算法在企业中的应用:从人脸识别到缺陷检测,6大应用场景
  • ReactPage内容导出PPT:革命性的企业级内容复用解决方案
  • 如何快速配置DOL游戏美化包:新手终极指南
  • 工作流自动化方法论:从业务流程优化到零代码配置实战
  • 智能字体管理实战指南:WenQuanYi Micro Hei极致配置完全手册
  • ReactPage终极指南:从零开始构建现代化网页编辑器
  • Compose笔记(六十九)--Pager
  • 【图像分割】黎曼流形特征空间的多视角聚类遥感图像分割【含Matlab源码 14899期】
  • 不同 AI 生成 2026 年工作计划 PPT 的使用门槛对比
  • node.js基于vue的实验室器材耗材设备信息管理系统_x50ntw8y
  • 入梦工具箱
  • 中药材原料口碑排行榜:哪些药材最受欢迎?
  • 腾讯天美AI团队重新定义语言模型训练:精确还是多样?