【C++基础】09、结构体

embedded/2024/12/26 0:46:00/

一、结构体(struct)

        C/C++ 数组允许定义可存储相同类型数据项的变量,但是结构体是 C++ 中另一种用户自定义的可用的数据类型,它允许存储不同类型的数据项。

        结构体用于表示一条记录,假设现在想要跟踪图书馆中书本的动态,可能需要跟踪每本书的下列属性:

  • Title :标题
  • Author :作者
  • Subject :类目
  • Book ID :书的 ID

        如果传统的定义变量会非常散乱,这时候结构体派上了用场。

二、定义结构

        在 C++ 中,struct 语句用于定义结构体(structure)。

        结构体是一种用户自定义的数据类型,用于将不同类型的数据组合在一起。与类(class)类似,结构体允许你定义成员变量和成员函数。

        为了定义结构,必须使用 struct 语句。struct 语句定义了一个包含多个成员的新的数据类型,struct 语句的格式如下:

struct type_name {
member_type1 member_name1;
member_type2 member_name2;
member_type3 member_name3;
.
.
} object_names;

        type_name 是结构体类型的名称,member_type1 member_name1 是标准的变量定义,比如 int i; 或者 float f; 或者其他有效的变量定义。在结构定义的末尾,最后一个分号之前,可以指定一个或多个结构变量,这是可选的。下面是声明一个结构体类型 Books,变量为 book

struct Books
{char  title[50];char  author[50];char  subject[100];int   book_id;
} book;

结构体优点:

  • 简单数据封装:适合封装多种类型的简单数据,通常用于数据的存储。
  • 轻量级:相比 class,结构体语法更简洁,适合小型数据对象。
  • 面向对象支持:支持构造函数、成员函数和访问权限控制,可以实现面向对象的设计。

结构体的各个部分详细介绍

  • struct 关键字:用于定义结构体,它告诉编译器后面要定义的是一个自定义类型。

  • 成员变量:成员变量是结构体中定义的数据项,它们可以是任何基本类型或其他自定义类型。在 struct 中,这些成员默认是 public,可以直接访问。

  • 成员函数:结构体中也可以包含成员函数,这使得结构体在功能上类似于类。成员函数可以操作结构体的成员变量,提供对数据的封装和操作。

  • 访问权限:与 class 类似,你可以在 struct 中使用 public、private 和 protected 来定义成员的访问权限。在 struct 中,默认所有成员都是 public,而 class 中默认是 private。

三、访问结构成员

        为了访问结构的成员,我们使用成员访问运算符(.)。成员访问运算符是结构变量名称和我们要访问的结构成员之间的一个句号。

        strcpy(s1, s2):将字符串 s2 复制到字符串 s1 中。s1 必须有足够的空间来存储 s2。返回值:s1

        下面的实例演示了结构的用法:

#include <iostream>
#include <cstring>using namespace std;// 声明一个结构体类型 Books 
struct Books
{char  title[50];char  author[50];char  subject[100];int   book_id;
};int main( )
{Books Book1;        // 定义结构体类型 Books 的变量 Book1Books Book2;        // 定义结构体类型 Books 的变量 Book2// Book1 详述strcpy( Book1.title, "C++ 教程");strcpy( Book1.author, "Runoob"); strcpy( Book1.subject, "编程语言");Book1.book_id = 12345;// Book2 详述strcpy( Book2.title, "CSS 教程");strcpy( Book2.author, "Runoob");strcpy( Book2.subject, "前端技术");Book2.book_id = 12346;// 输出 Book1 信息cout << "第一本书标题 : " << Book1.title <<endl;cout << "第一本书作者 : " << Book1.author <<endl;cout << "第一本书类目 : " << Book1.subject <<endl;cout << "第一本书 ID : " << Book1.book_id <<endl;// 输出 Book2 信息cout << "第二本书标题 : " << Book2.title <<endl;cout << "第二本书作者 : " << Book2.author <<endl;cout << "第二本书类目 : " << Book2.subject <<endl;cout << "第二本书 ID : " << Book2.book_id <<endl;return 0;
}

实例中定义了结构体类型 Books 及其两个变量 Book1 和 Book2。当上面的代码被编译和执行时,它会产生下列结果:

四、typedef 关键字

下面是一种更简单的定义结构的方式,可以为创建的类型取一个"别名"。例如:

typedef struct Books
{char  title[50];char  author[50];char  subject[100];int   book_id;
}Books;

现在,可以直接使用 Books 来定义 Books 类型的变量,而不需要使用 struct 关键字。下面是实例:

Books Book1, Book2;


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

相关文章

AIDD - 人工智能药物设计 - 在 Docker 上创建和运行 PostgreSQL + RDKit 卡带环境

在 Docker 上创建和运行 PostgreSQL RDKit 卡带环境 背景 我们将讨论化学数据库。 看起来&#xff0c;如果你在 PostgreSQL 中放置一个 RDKit cartridge &#xff08;扩展&#xff09;&#xff0c;就可以基于 SQL 进行结构相似性搜索&#xff0c;看起来很有趣。但是我找不到…

【故障处理系列--gitlab的CI流水线下载安装包提示报错】

故障现象&#xff1a; 前端同事一直向我反映使用alpine-node系列的镜像&#xff0c;安装包报错故障原因 在CI文件上配置的代理没有生效&#xff0c;导致流水线无法在gitlab-runner上拉取https://registry.npmmirror.com仓库软件包 后来查资料提示说&#xff0c;在gitlab的CI文…

JMeter 二次开发之环境准备

通过JMeter二次开发&#xff0c;可以充分发挥JMeter的潜力&#xff0c;定制化和扩展工具的能力以满足具体需求。无论是开发自定义插件、函数二次开发还是定制UI&#xff0c;深入学习和掌握JMeter的二次开发技术&#xff0c;将为接口功能测试/接口性能测试工作带来更多的便利和效…

Python中所有子图标签Legend显示详解

在数据可视化中&#xff0c;图例&#xff08;legend&#xff09;是一个非常重要的元素&#xff0c;它能够帮助读者理解图表中不同元素的含义。特别是在使用Python进行可视化时&#xff0c;matplotlib库是一个非常强大的工具&#xff0c;能够轻松创建包含多个子图的图表&#xf…

MVCC了解

MVCC&#xff08;多版本并发控制&#xff09;学习指南及代码示例 一、学习MVCC前先了解什么 1. MVCC的定义和作用 MVCC是一种并发控制机制&#xff0c;用于解决并发事务访问数据库时可能出现的问题&#xff0c;如脏读、不可重复读和幻读。它通过为每个数据行维护多个版本来实…

uniapp开发微信小程序实现获取“我的位置”

1. 创建GetLocation项目 使用HBuilder X创建一个项目GetLocation,使用Vue3。 2. 在腾讯地图开放平台中创建应用 要获取位置,在小程序中需要使用腾讯地图或是高德地图。下面以腾讯地图为例。 (1)打开腾讯地图开放平台官方网址:腾讯位置服务 - 立足生态,连接未来 (2)注册…

开源模型应用落地-LlamaIndex学习之旅-Agents-用自然语言构建Agent(一)

一、前言 在当今这个信息爆炸的时代,数据如同浩瀚宇宙中的繁星,海量且繁杂。从企业的海量业务数据到学术研究的丰富文献,从互联网上的碎片化信息到个人电脑中的各类文档,数据无处不在,但如何从中高效地获取有价值的信息并加以利用,却成为了摆在人们面前的巨大挑战 。 与此…

链原生 Web3 AI 网络 Chainbase 推出 AVS 主网, 拓展 EigenLayer AVS 应用场景

Chainbase AVS 主网的正式上线&#xff0c;正在将 Chainbase 不同的层进行深入的串联&#xff0c;为 Chainbase 数据网络带来了验证和处理方面的应用与拓展的能力&#xff0c;并成为数据体系全面启动的新契机。 在 12 月 4 日&#xff0c;链原生的 Web3 AI 数据网络 Chainbase …