目录

  • 一、前言
  • 二、C++的数据结构
  • 三、定义结构
  • 四、访问结构成员
  • 五、结构作为函数参数
  • 六、指向结构的指针

一、前言

因为C++的数据结构很多,很复杂,一篇文章根本讲不到所有的数据结构。即使写出来,看了一遍效果也不好,所以博主打算最近都更新C++的数据结构类型,让读者弄懂C++的数据结构与算法。

二、C++的数据结构

C/C++ 数组允许定义可存储相同类型数据项的变量,但是结构是 C++ 中另一种用户自定义的可用的数据类型,它允许您存储不同类型的数据项。
结构用于表示一条记录,假设您想要建立一个游戏中的英雄,您可能需要记录下每个应用的下列属性:

  • life_value:生命值
  • hero_name:英雄名称
  • skill:技能
  • ID:英雄id

三、定义结构

为了定义结构,您必须使用 struct 语句。struct 语句定义了一个包含多个成员的新的数据类型。
下面是声明一个结构体类型 Heros,变量为 hero:

例子:

struct Heros
{char  life_value[50];char  hero_name[50];char  skill[100];int   ID;
} hero;

四、访问结构成员

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

#include <iostream>
#include <cstring>using namespace std;// 声明一个结构体类型 Heros
struct Heros
{char  life_value[50];char  hero_name[50];char  skill[100];int   ID;
} hero;int main( )
{Heros(Hero1);        // 定义结构体类型 Heros 的变量 Hero1Heros(Hero2);        // 定义结构体类型 Heros 的变量 Hero2// Hero1 详述strcpy( Hero1.life_value, "500");strcpy( Hero1.hero_name, "武器大师");strcpy( Hero1.skill, "反击风暴");Hero1.ID = 996;// Hero2 详述strcpy( Hero2.life_value, "600");strcpy( Hero2.hero_name, "德玛西亚皇子");strcpy( Hero2.skill, "人在塔在");Hero2.ID = 007;// 输出 Hero1 信息cout << "第一个英雄的生命值为 : " << Hero1.life_value <<endl;cout << "第一个英雄的名称为 : " << Hero1.hero_name <<endl;cout << "第一个英雄的技能为 : " << Hero1.skill <<endl;cout << "第一个英雄的ID为 : " << Hero1.ID <<endl;cout << endl;// 输出 Heor2 信息cout << "第二个英雄的生命值为 : " << Hero2.life_value <<endl;cout << "第二个英雄的生命值为 : " << Hero2.hero_name <<endl;cout << "第二个英雄的生命值为 : " << Hero2.skill <<endl;cout << "第二个英雄的ID为 : " << Hero2.ID <<endl;return 0;
}

输出:

第一个英雄的生命值为 : 500
第一个英雄的名称为 : 武器大师
第一个英雄的技能为 : 反击风暴
第一个英雄的ID为 : 996第二个英雄的生命值为 : 600
第二个英雄的生命值为 : 德玛西亚皇子
第二个英雄的生命值为 : 人在塔在
第二个英雄的ID为 : 7

五、结构作为函数参数

您可以把结构作为函数参数,传参方式与其他类型的变量或指针类似。您可以使用上面实例中的方式来访问结构变量:

#include <iostream>
#include <cstring>using namespace std;
void printHero(struct Heros hero);// 声明一个结构体类型 Heros
struct Heros
{char  life_value[50];char  hero_name[50];char  skill[100];int   ID;
} hero;int main( )
{Heros(Hero1);        // 定义结构体类型 Heros 的变量 Hero1Heros(Hero2);        // 定义结构体类型 Heros 的变量 Hero2// Hero1 详述strcpy( Hero1.life_value, "500");strcpy( Hero1.hero_name, "武器大师");strcpy( Hero1.skill, "反击风暴");Hero1.ID = 996;// Hero2 详述strcpy( Hero2.life_value, "600");strcpy( Hero2.hero_name, "德玛西亚皇子");strcpy( Hero2.skill, "人在塔在");Hero2.ID = 007;// 输出 Hero1 信息printHero(Hero1);// 输出 Hero2 信息printHero(Hero2);return 0;
}
void printHero(struct Heros hero)
{cout << "英雄的生命值:" << hero.life_value << endl;cout << "英雄的名称:" << hero.hero_name << endl;cout << "英雄的技能:" << hero.skill << endl;cout << "英雄的ID:" << hero.ID << endl;
}

输出:

英雄的生命值:500
英雄的名称:武器大师
英雄的技能:反击风暴
英雄的ID:996
英雄的生命值:600
英雄的名称:德玛西亚皇子
英雄的技能:人在塔在
英雄的ID:7

六、指向结构的指针

您可以定义指向结构的指针,方式与定义指向其他类型变量的指针相似,如下所示:

struct Books *struct_pointer;

现在,您可以在上述定义的指针变量中存储结构变量的地址。为了查找结构变量的地址,请把 & 运算符放在结构名称的前面,如下所示:

struct_pointer = &Book1;

为了使用指向该结构的指针访问结构的成员,您必须使用 -> 运算符,如下所示:

struct_pointer->title;

例子:

#include <iostream>
#include <cstring>using namespace std;
void printHero(struct Heros *hero);// 声明一个结构体类型 Heros
struct Heros
{char  life_value[50];char  hero_name[50];char  skill[100];int   ID;
};int main( )
{Heros(Hero1);        // 定义结构体类型 Heros 的变量 Hero1Heros(Hero2);        // 定义结构体类型 Heros 的变量 Hero2// Hero1 详述strcpy( Hero1.life_value, "500");strcpy( Hero1.hero_name, "武器大师");strcpy( Hero1.skill, "反击风暴");Hero1.ID = 996;// Heor2 详述strcpy( Hero2.life_value, "600");strcpy( Hero2.hero_name, "德玛西亚皇子");strcpy( Hero2.skill, "人在塔在");Hero2.ID = 007;// 通过传 Hero1 的地址来输出 Hero1 信息printHero(&Hero1);// 通过传 Hero2 的地址来输出 Hero2 信息printHero(&Hero2);return 0;
}
void printHero(struct Heros *hero)
{cout << "英雄的生命值:" << hero->life_value << endl;cout << "英雄的名称:" << hero->hero_name << endl;cout << "英雄的技能:" << hero->skill << endl;cout << "英雄的ID:" << hero->ID << endl;
}

输出:

英雄的生命值:500
英雄的名称:武器大师
英雄的技能:反击风暴
英雄的ID:996
英雄的生命值:600
英雄的名称:德玛西亚皇子
英雄的技能:人在塔在
英雄的ID:7

C++入门到精通。(二十、C++的数据结构)相关推荐

  1. java从入门到精通二十四(三层架构完成增删改查)

    java从入门到精通二十四(三层架构完成增删改查) 前言 环境准备 创建web项目结构 导入依赖和配置文件 创建层次模型 实现查询 实现添加 实现修改 完成删除 做一个用户登录验证 会话技术 cook ...

  2. Spring 从入门到精通 (二十) 持久层框架 MyBatis

    关键词:Spring | 整合 | 持久层 | MyBatis 本专栏通过理论和实践相结合,系统学习框架核心思想及简单原理,原创不易,如果觉得文章对你有帮助,点赞收藏支持博主 ✨ 目录 一.MyBat ...

  3. Excel数据分析从入门到精通(十二)28个图表之分布分析

    Excel数据分析从入门到精通(十二)28个图表之分布分析 1.分布分析-直方图 2.分布分析-气泡矩阵图 3.分布分析-箱线图 4.分布分析-散点图 5.分布分析-旋风图 1.分布分析-直方图 有表 ...

  4. Simulink仿真入门到精通(十) S函数

    Simulink仿真入门到精通(十) S函数 10.1. S函数的概述 10.2 S函数的类型 10.3 S函数的要素 10.4 S函数的组成及执行顺序 10.5 使用不同的语言编写S函数 10.5. ...

  5. Kali Linux 从入门到精通(二)-安装

    Kali Linux 从入门到精通(二)-安装 Kail Linux 安装 持久加密USB安装-1 LUSK:Linux Unified Key Setup 磁盘分区加密规范 不依赖与操作系统的磁盘级 ...

  6. 深度学习入门笔记(二十):经典神经网络(LeNet-5、AlexNet和VGGNet)

    欢迎关注WX公众号:[程序员管小亮] 专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具 ...

  7. Excel数据分析从入门到精通(十)28个图表之对比分析

    Excel数据分析从入门到精通(十)28个图表之对比分析 1.对比分析-箭头图 2.对比分析-排行图 3.对比分析-小人对比图 4.对比分析-雷达图 5.对比分析-条形图 6.对比分析-柱形图 7.表 ...

  8. Mybatis从入门到精通二(入门详解)

    Mybatis从入门到精通二(想学Mybatis,看了这一篇你就不需要其他的了) 本课程分为两天第一天的请参考: https://blog.csdn.net/weixin_43564627/artic ...

  9. java从入门到精通二十三(Servlet)

    java从入门到精通二十三(Servlet) Servlet 说明 Servlet初步入门尝试 Servlet生命周期 Servlet方法说明和体系结构 方法说明 体系结构说明 一些优化封装 urlP ...

  10. Excel数据分析从入门到精通(十五)数据透视表之动态仪表盘

    Excel数据分析从入门到精通(十五)数据透视表之动态仪表盘 1.绘制销售额汇总情况 2.绘制种类销售额情况+种类销售额占比 种类销售额情况 种类销售占比 3.绘制地区销售额情况和地区销售额占比 地区 ...

最新文章

  1. Java异常处理和常用类
  2. 篇三:访问JSON静态文件
  3. labuladong 的算法小抄_关于算法笔试的几个套路,一点就透
  4. java开发分支_如何选择Java 的分支?
  5. Oracle性能调优之--Buffer cache 的调整与优化
  6. linux 误删etc,centos7中误删/etc/passwd与etc/shadow文件恢复
  7. Python解题 - CSDN周赛第9期
  8. ORACLE数据文件系统只读(FC中断引起)转载【xiaoyu】
  9. 欧设传奇服务器修改充值记录,沙巴克传奇修改记录(包含详细修改路径)
  10. jsp注册页面java代码_使用Servlet和JSP实现用户注册功能
  11. 为什么普遍自学能力不足
  12. ElasticSearch 狂神说
  13. 19年6月英语六级阅读单词
  14. HDMI Trans (FPGA)介绍及解析 (二)串并转换
  15. 方差分析 可汗学院统计学 笔记
  16. 阿里巴巴建成全球超大规模数据中心内“RDMA高速网”,以支撑人工智能科学计算
  17. 慕了!17年阿里Java开发大佬把Spring Boot的精髓都总结出来了
  18. 人肉搜索受害者可法律维权
  19. 网站建设后的seo优化工作将如何展开?
  20. 【知识分享】电子元器件封装(文末有资料)

热门文章

  1. 干货丨一文带你读懂深度学习:AI 认识世界的方式如同小孩
  2. Spring生命周期简述
  3. 潮牌搭配APP的设计与实现
  4. 系统如何使用键盘快捷关机
  5. java 跳一跳辅助实现源码
  6. typecho 设置文字图片居中
  7. 欠揍的ffmpeg,调试android里的ffmpeg (1)
  8. 面试官:你能说说 Nacos 的实现原理吗?
  9. 微信朋友圈推广广告怎么投放?
  10. win10系统优化计算机,电脑升级win10后,必做的5项优化,至少提升20%的运行速度...