C++ 结构体(struct)

embedded/2024/11/27 20:52:08/

C++ 结构体(struct)

在C++编程语言中,结构体(struct)是一种强大的数据结构,它允许我们将不同类型的数据项组合成一个单一的类型。本文将深入探讨C++中结构体的相关知识点,并提供实际应用示例。

结构体的定义与特性

结构体是一种用户自定义的数据类型,它允许我们将多个变量组合在一起,这些变量可以是不同的数据类型。
结构体的定义通常如下所示:

struct StructName {DataType1 member1;DataType2 member2;// ...
};

在C++中,结构体与类(class)非常相似,主要区别在于默认的访问权限:结构体的成员默认是public,而类的成员默认是private

结构体的实例化与访问

结构体可以通过以下方式进行实例化:

StructName instanceName;

或者在声明时直接初始化:

StructName instanceName = {value1, value2};

访问结构体成员可以通过点(.)操作符:

instanceName.member1 = someValue;
DataType2 temp = instanceName.member2;

结构体与函数

结构体可以作为函数的参数传递,也可以作为函数的返回值。这使得结构体成为处理复杂数据的有力工具。

作为参数传递

void function(StructName param) {// 操作param
}

作为返回值

StructName function() {StructName result;// 初始化resultreturn result;
}

结构体与数组

结构体可以作为数组的元素,这使得我们可以创建同类型数据项的集合。

StructName array[10];

指针与结构体

结构体指针允许我们访问和操作结构体变量的地址。这对于动态内存分配和复杂的数据操作非常有用。

StructName* ptr = &instanceName;

结构体的应用示例

简单的数据封装

#include <iostream>
using namespace std;struct Point {int x, y;
};int main() {Point p = {1, 2};cout << "Point coordinates: (" << p.x << ", " << p.y << ")" << endl;return 0;
}

复杂数据结构

#include <iostream>
using namespace std;struct Book {string title;string author;int year;
};int main() {Book library[3] = {{"The Great Gatsby", "F. Scott Fitzgerald", 1925},{"1984", "George Orwell", 1949},{"To Kill a Mockingbird", "Harper Lee", 1960}};for (int i = 0; i < 3; ++i) {cout << "Title: " << library[i].title<< ", Author: " << library[i].author<< ", Year: " << library[i].year << endl;}return 0;
}

C++ Struct 的优点

代码组织性更好:C++ Struct 可以将相关的变量和函数组合在一起,提高代码的组织性和可读性。
数据封装:C++ Struct 可以将数据封装在结构体中,提高数据的安全性和可靠性。
代码复用:C++ Struct 可以定义结构体函数,提高代码的复用性。

C++ Struct 的常见应用

数据库:C++ Struct 可以用于定义数据库中的表结构和记录结构。
文件操作:C++ Struct 可以用于定义文件中的数据结构和格式。
网络通信:C++ Struct 可以用于定义网络通信中的数据包结构和格式。
游戏开发:C++ Struct 可以用于定义游戏中的角色、物品和场景结构。

C/C++中的struct

特性C语言中的structC++语言中的struct
默认访问权限public(成员默认为公开)private(成员默认为私有)
包含函数/方法不支持支持(可以包含成员函数)
继承不支持支持(可以继承自其他struct或class)
构造函数和析构函数不支持支持(可以定义构造函数和析构函数)
内存对齐由编译器决定,不可控制可以通过#pragma pack控制
匿名结构体支持不支持
模板不支持支持(可以创建模板struct)
联合体和枚举支持支持(C++还支持enum class

structtypedef struct 联系与区别

structtypedef struct
定义方式定义一个结构体为一个结构体定义一个新的名称
使用方式必须使用 struct 关键字来引用该结构体可以直接使用新的名称来引用该结构体
类型名struct XXXXXX
例子struct Person { int age; char name[20]; };typedef struct { int age; char name[20]; } Person;
优点清晰地定义了结构体的类型使代码更简洁易读
缺点每次引用结构体时都需要使用 struct 关键字可能会导致类型名冲突
  1. struct 用于定义一个结构体。
  2. typedef struct 用于为一个结构体定义一个新的名称。
  3. struct 和 typedef struct 都可以用来定义结构体,但 typedef struct 更常用,因为它可以使代码更简洁易读。
  4. 当使用 struct 定义结构体时,必须使用 struct 关键字来引用该结构体,而当使用 typedef struct 定义结构体时,可以直接使用新的名称来引用该结构体。

http://www.ppmy.cn/embedded/141002.html

相关文章

【大语言模型】ACL2024论文-20 SCIMON:面向新颖性的科学启示机器优化

【大语言模型】ACL2024论文-20 SCIMON&#xff1a;面向新颖性的科学启示机器优化 目录 文章目录 【大语言模型】ACL2024论文-20 SCIMON&#xff1a;面向新颖性的科学启示机器优化目录摘要研究背景问题与挑战如何解决创新点算法模型实验效果推荐阅读指数&#xff1a;★★★★☆ …

【LeetCode: 743. 网络延迟时间 + Dijkstra】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

网络爬虫——分布式爬虫架构

分布式爬虫在现代大数据采集中是不可或缺的一部分。随着互联网信息量的爆炸性增长&#xff0c;单机爬虫在性能、效率和稳定性上都面临巨大的挑战。分布式爬虫通过任务分发、多节点协作以及结果整合&#xff0c;成为解决大规模数据抓取任务的核心手段。 本节将从 Scrapy 框架的…

〔 MySQL 〕之内置函数

目录 1 日期函数 ​编辑 2 字符串函数​编辑 3 数学函数 4 其它函数 5 实战OJ ● 查找字符串中逗号出现的次数_牛客题霸_牛客网 1 日期函数 ● 获得年月日&#xff1a; select current_date();----------------| current_date() |----------------| 2017-11-19 |--------…

基于IPMI的服务器硬件监控指标解读

在现代化数据中心中&#xff0c;服务器的稳定运行对于保障业务连续性至关重要。为了实时掌握服务器的健康状况&#xff0c;运维团队需要借助高效的监控工具。监控易作为一款功能强大的监控软件&#xff0c;支持使用IPMI&#xff08;Intelligent Platform Management Interface&…

AI加持,华为全屋智能品牌升级为“鸿蒙智家”

1.传统智能家居的困境&#xff1a;从便利到繁琐 近年来&#xff0c;智能家居因其便捷性和科技感受到消费者的青睐。然而&#xff0c;随着用户需求的多样化&#xff0c;传统智能家居的弊端逐渐显现&#xff1a; 设备连接复杂&#xff0c;品牌间兼容性不足&#xff0c;用户不得不…

前端:base64的作用

背景 项目中发现&#xff0c;img标签中写src&#xff0c;读取一个png图片&#xff0c;只有16kb&#xff0c;速度特别慢。 解决办法&#xff0c;将图片转为base64&#xff0c;然后读取&#xff0c;速度特别快17ms就解决。 定义&#xff1a;base64是一种基于64个可打印字符(A-…

AWS IAM 及其功能

IAM 代表身份和访问管理&#xff0c;可帮助控制谁可以进入云、访问 AWS 资源以及进入后可以做什么。 身份&#xff1a; IAM 帮助管理可以与 AWS 资源交互的身份&#xff08;如用户名或服务帐户&#xff09;。 访问&#xff1a;它决定每个身份可以在 AWS 服务上执行哪些操作&am…