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

C++基础入门丨8. 结构体——还需要知道这些

Author:AXYZdong 硕士在读 工科男
有一点思考,有一点想法,有一点理性!
定个小小目标,努力成为习惯!在最美的年华遇见更好的自己!
CSDN@AXYZdong,CSDN首发,AXYZdong原创
唯一博客更新的地址为: 👉 AXYZdong的博客 👈
B站主页为:AXYZdong的个人主页

系列文章目录

  • C++基础入门丨1. 初识C++像极了C语言
  • C++基础入门丨2. 数据类型基础
  • C++基础入门丨3. 搞明白4类运算符——运算符
  • C++基础入门丨4. 程序结构有哪几种?——程序流程结构
  • C++基础入门丨5. 数组——一维数组和二维数组
  • C++基础入门丨6. 函数——定义、调用和声明
  • C++基础入门丨7. 指针——一文搞懂指针

操作系统:Windows 10
IDE:Visual Studio 2019

文章目录

      • 系列文章目录
    • 1 什么是结构体
    • 2 结构体的定义和使用
    • 3 结构体数组
    • 4 结构体指针
    • 5 结构体嵌套结构体
    • 6 结构体做函数参数
    • 7 结构体中 const 使用场景

1 什么是结构体

结构体属于用户自定义的数据类型,允许用户存储不同的数据类型。

2 结构体的定义和使用

语法struct 结构体名 { 结构体成员列表 };

通过结构体创建变量的方式有三种:

  1. struct 结构体名 变量名
  2. struct 结构体名 变量名 = { 成员1值 , 成员2值…}
  3. 定义结构体时顺便创建变量
#include<iostream>
#include<string>
//学生结构体定义
struct Student
{string s_name;int score;
};
//老师结构体定义
struct Teacher
{string t_name;Student sArray[5];
};int main()
{Teacher tArray[3];		//创建三名老师的数组system("pause");return 0;	
}
  • 定义结构体时的关键字是 struct ,不可省略
  • 创建结构体变量时,关键字 struct 可以省略
  • 结构体变量利用操作符 . 访问成员

3 结构体数组

将自定义的结构体放入到数组中方便维护。

语法:struct 结构体名 数组名[元素个数] = { {} , {} , … {} }

	//结构体数组struct student arr[3]={{"张三",18,80 },{"李四",19,60 },{"王五",20,70 }};

4 结构体指针

通过指针访问结构体中的成员。

操作符 -> 可以通过结构体指针访问结构体属性。

#include<iostream>
#include<string>using namespace std;//结构体定义
struct student
{//成员列表string name;  //姓名int age;      //年龄int score;    //分数
};int main() {struct student stu = { "张三",18,100, };struct student* p = &stu;p->score = 80; //指针通过 -> 操作符可以访问成员cout << "姓名:" << p->name << " 年龄:" << p->age << " 分数:" << p->score << endl;system("pause");return 0;
}

在这里插入图片描述

5 结构体嵌套结构体

结构体中的成员可以是另一个结构体。

//学生结构体定义
struct Student
{string s_name;int score;
};
//老师结构体定义
struct Teacher
{string t_name;Student sArray[5];	//嵌套了学生的结构体
};
  • 在结构体中可以定义另一个结构体作为成员,用来解决实际问题

6 结构体做函数参数

将结构体作为参数向函数中传递。

传递方式有两种:

  • 值传递
  • 地址传递
#include<iostream>
#include<string>using namespace std;//结构体定义
struct student
{//成员列表string name;  //姓名int age;      //年龄int score;    //分数
};
//值传递
void printstudent1(student stu)
{stu.age = 20;cout << "姓名:" << stu.name << " 年龄:" << stu.age << " 分数:" << stu.score << endl;
}
//地址传递
void printstudent2(student * stu)
{stu->age = 20;cout << "姓名:" << stu->name << " 年龄:" << stu->age << " 分数:" << stu->score << endl;
}
int main() {struct student stu = { "张三",18,100, };printstudent1(stu);cout << "主函数中 姓名:" << stu.name << " 年龄:" << stu.age << " 分数:" << stu.score << endl;printstudent2(&stu);cout << "主函数中 姓名:" << stu.name << " 年龄:" << stu.age << " 分数:" << stu.score << endl;system("pause");return 0;
}

在这里插入图片描述

  • 在使用地址传递时,形参的改变会影响实参,在上述程序中也就是改变了主函数中的数据。而值传递不会改变主函数中的数据。
  • 如果不想修改主函数中的数据,用值传递,反之用地址传递。

7 结构体中 const 使用场景

const 来防止误操作。

void printStudent(const student *stu) //加const防止函数体中的误操作
{//stu->age = 100; //操作失败,因为加了const修饰cout << "姓名:" << stu->name << " 年龄:" << stu->age << " 分数:" << stu->score << endl;}
  • 在结构体指针前加 const 时,就无法通过结构体指针来修改数据,也就是写操作失效,只可进行读操作。

Reference

  • [1]:https://www.bilibili.com/video/BV1VJ411M7WR

—— END ——


如果以上内容有任何错误或者不准确的地方,欢迎在下面 👇 留言。或者你有更好的想法,欢迎一起交流学习~~~

更多精彩内容请前往 AXYZdong的博客

相关文章:

C++基础入门丨8. 结构体——还需要知道这些

Author&#xff1a;AXYZdong 硕士在读 工科男 有一点思考&#xff0c;有一点想法&#xff0c;有一点理性&#xff01; 定个小小目标&#xff0c;努力成为习惯&#xff01;在最美的年华遇见更好的自己&#xff01; CSDNAXYZdong&#xff0c;CSDN首发&#xff0c;AXYZdong原创 唯…...

算法第十六期——动态规划(DP)之线性DP

【概述】 线性动态规划&#xff0c;是较常见的一类动态规划问题&#xff0c;其是在线性结构上进行状态转移&#xff0c;这类问题不像背包问题、区间DP等有固定的模板。 线性动态规划的目标函数为特定变量的线性函数&#xff0c;约束是这些变量的线性不等式或等式&#xff0c;目…...

智慧新零售网络解决方案,助力新零售企业数智化转型

随着数字化时代的不断发展&#xff0c;新零售连锁业务模式“线上线下”融合发展&#xff0c;数据、设备在逐渐增加&#xff0c;门店数量也会随着企业规模的扩大而增加&#xff0c;但由于传统网络架构不稳定、延时、容量小影响服务质量&#xff08;QoS&#xff09;、分支设备数量…...

Go语言规范中的可赋值

了解可赋值规范的重要性当使用type关键字定义类型的时候&#xff0c;会遇到一些问题&#xff0c;如下&#xff1a;func main(){var i int 2pushInt(i) } type MyInt int //基于int定义MyInt func pushInt(i MyInt){}结果&#xff1a;调用函数pushInt报错 cannot use i (variab…...

外盘国际期货招商:原油市场热点话题

原油市场热点话题 问&#xff1a;目前美国原油库存如何&#xff1f; 答&#xff1a;EIA原油库存数据显示&#xff0c;由于美国炼油厂季节性检修&#xff0c;开工率继续下降&#xff0c;原油库存连续九周增长至2021年5月份以来最高水平&#xff0c;同期美国汽油库存减少而精炼…...

[蓝桥杯 2018 省 A] 付账问题 贪心题

几个人一起出去吃饭是常有的事。但在结帐的时候&#xff0c;常常会出现一些争执。现在有 n 个人出去吃饭&#xff0c;他们总共消费了 S 元。其中第 i 个人带了 ai 元。幸运的是&#xff0c;所有人带的钱的总数是足够付账的&#xff0c;但现在问题来了&#xff1a;每个人分别要出…...

微机原理复习(周五),计算机组成原理图

1.计算机由运算器&#xff0c;控制器&#xff0c;存储器&#xff0c;输入设备&#xff0c;输出设备等5大基本部件组成。 2.冯诺依曼提出存储设计思想是&#xff1a;数字计算机的数制采用二进制&#xff0c;存储程序&#xff0c;程序控制。 3.计算机的基本组成框图&#xff1a…...

用了10年Postman,意想不到它的Mock功能也如此强大

最近在做一些app&#xff0c;前后端分离的开发模式是必须的。一直用的python flask做后端的快速POC&#xff0c;python本身就是一门胶水语言&#xff0c;开发起来方便快捷&#xff0c;而flask又是一个极简的webserver框架&#xff08;比Django简洁&#xff09;。但在这里推荐的…...

项目重构,从零开始搭建一套新的后台管理系统

背景 应公司发展需求&#xff0c;我决定重构公司的后台管理系统&#xff0c;从提出需求建议到现在的实施&#xff0c;期间花了将近半个月的时间&#xff0c;决定把这些都记录下来。 之前的后台管理系统实在是为了实现功能而实现的&#xff0c;没有考虑到后期的扩展性&#xf…...

day20_Map

今日内容 上课同步视频:CuteN饕餮的个人空间_哔哩哔哩_bilibili 同步笔记沐沐霸的博客_CSDN博客-Java2301 零、 复习昨日 一、作业 二、比较器排序 三、Collections 四、Map 五、HashMap 六、TreeMap 零、 复习昨日 HashSet 不允许重复元素,无序 HashSet去重原理: 先比较hashco…...

localStorage和sessionStorage

目录 一、localStorage和SessionStorage在哪里&#xff0c;是什么 二、localStorage和sessionStorage区别 三、localStorage常用方法 四、sessionStorage常用方法 一、localStorage和SessionStorage在哪里&#xff0c;是什么 【1】在浏览器开发者工具的Application栏目里&…...

IP地址,子网掩码,网段 概念详解

文章目录1. 子网掩码1.1 子网掩码的概念及作用1.2 子网掩码的组成1.3 子网掩码的表示方法1.4 为什么要使用子网掩码&#xff1f;1.5 子网掩码的分类2. 子网掩码和IP地址的关系2.1 根据掩码确定网段IP地址是以 网络号和 主机号来标示网络上的主机的&#xff0c;我们把网络号相同…...

数影周报:动视暴雪疑似数据泄露,数据出境安全评估申报最新进展

本周看点&#xff1a;动视暴雪疑似员工敏感信息及游戏数据泄露&#xff1b;谷歌云计算部门&#xff1a;两名员工合用一个工位&#xff1b;数据出境安全评估申报最新进展&#xff1b;TikTok Shop东南亚商城在泰国和菲律宾公布&#xff1b;智己汽车获九大金融机构50亿元贷款签约.…...

Web安全最详细学习路线指南,从入门到入职(含书籍、工具包)

在这个圈子技术门类中&#xff0c;工作岗位主要有以下三个方向&#xff1a; 安全研发 安全研究&#xff1a;二进制方向 安全研究&#xff1a;网络渗透方向 下面逐一说明一下. 第一个方向&#xff1a;安全研发 你可以把网络安全理解成电商行业、教育行业等其他行业一样&#x…...

ChatGPT?听说Biying把它下架了

ChatGPT被玩疯了&#xff0c;开始放飞自我 ChatGPT版微软必应上线不到10天…就被网友玩坏了 先说这个词&#xff0c;放飞自我&#xff0c;什么东西才会放飞自我&#xff1f; 人放飞自我&#xff0c;人&#xff1f;你确定是人&#xff1f; 所以让我们来把上面的句子改写一下。…...

中电金信:金融数字化转型路在何方?这里有答案

近期&#xff0c;媒体大数网整合了业内10份研究报告&#xff0c;详解金融数字化转型的思路、方法与路径。其中「中国电子金融级数字底座“源启”白皮书」也被收录其中。让我们一同阅读文章&#xff0c;探究金融数字化转型相关问题的答案吧。 当前&#xff0c;金融科技正在回归…...

【Leedcode】数据结构中链表必备的面试题(第五期)

【Leedcode】数据结构中链表必备的面试题&#xff08;第五期&#xff09; 文章目录【Leedcode】数据结构中链表必备的面试题&#xff08;第五期&#xff09;1.题目2.思路图解&#xff08;1&#xff09;第一步&#xff1a;复制每一个结点&#xff0c;插入到原结点和下一个结点之…...

ECDH secp256k1 集成

在Android 原生api是不支持secp256k1算法的&#xff0c;所以要先集成以下库&#xff1a;implementation com.madgag.spongycastle:core:1.58.0.0compile com.madgag.spongycastle:prov:1.54.0.0compile com.madgag.spongycastle:pkix:1.54.0.0compile com.madgag.spongycastle:…...

工单模型的理解与应用

工单&#xff08;任务单&#xff09;模型的定义 工单模型是一种分派任务的方法&#xff0c;可以用来跟踪、评估和报告任务的完成情况。它通常用于针对特定目标的重复性任务或项目&#xff0c;以确保任务能够按时完成并符合期望的标准。   工单模型的基本流程为&#xff1a;提…...

Python年利率计算器【N日年化收益率】

现在有闲钱的人&#xff0c;按照聪明等级从低到高排序应该是钱买股票&#xff0c;一年利率约为-20%钱放银行活期&#xff0c;年利率约为0.3%钱放银行定期&#xff0c;一年利率约为1.5%钱放余额宝&#xff08;支付宝&#xff09;或零钱通&#xff08;微信&#xff09;&#xff0…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

Java求职者面试指南:计算机基础与源码原理深度解析

Java求职者面试指南&#xff1a;计算机基础与源码原理深度解析 第一轮提问&#xff1a;基础概念问题 1. 请解释什么是进程和线程的区别&#xff1f; 面试官&#xff1a;进程是程序的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位&#xff1b;而线程是进程中的…...

在 Spring Boot 中使用 JSP

jsp&#xff1f; 好多年没用了。重新整一下 还费了点时间&#xff0c;记录一下。 项目结构&#xff1a; pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...

零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程

STM32F1 本教程使用零知标准板&#xff08;STM32F103RBT6&#xff09;通过I2C驱动ICM20948九轴传感器&#xff0c;实现姿态解算&#xff0c;并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化&#xff0c;适合嵌入式及物联网开发者。在基础驱动上新增…...

Java多线程实现之Runnable接口深度解析

Java多线程实现之Runnable接口深度解析 一、Runnable接口概述1.1 接口定义1.2 与Thread类的关系1.3 使用Runnable接口的优势 二、Runnable接口的基本实现方式2.1 传统方式实现Runnable接口2.2 使用匿名内部类实现Runnable接口2.3 使用Lambda表达式实现Runnable接口 三、Runnabl…...

【PX4飞控】mavros gps相关话题分析,经纬度海拔获取方法,卫星数锁定状态获取方法

使用 ROS1-Noetic 和 mavros v1.20.1&#xff0c; 携带经纬度海拔的话题主要有三个&#xff1a; /mavros/global_position/raw/fix/mavros/gpsstatus/gps1/raw/mavros/global_position/global 查看 mavros 源码&#xff0c;来分析他们的发布过程。发现前两个话题都对应了同一…...

Java设计模式:责任链模式

一、什么是责任链模式&#xff1f; 责任链模式&#xff08;Chain of Responsibility Pattern&#xff09; 是一种 行为型设计模式&#xff0c;它通过将请求沿着一条处理链传递&#xff0c;直到某个对象处理它为止。这种模式的核心思想是 解耦请求的发送者和接收者&#xff0c;…...

Android Framework预装traceroute执行文件到system/bin下

文章目录 Android SDK中寻找traceroute代码内置traceroute到SDK中traceroute参数说明-I 参数&#xff08;使用 ICMP Echo 请求&#xff09;-T 参数&#xff08;使用 TCP SYN 包&#xff09; 相关文章 Android SDK中寻找traceroute代码 设备使用的是Android 11&#xff0c;在/s…...

C++ Saucer 编写Windows桌面应用

文章目录 一、背景二、Saucer 简介核心特性典型应用场景 三、生成自己的项目四、以Win32项目方式构建Win32项目禁用最大化按钮 五、总结 一、背景 使用Saucer框架&#xff0c;开发Windows桌面应用&#xff0c;把一个html页面作为GUI设计放到Saucer里&#xff0c;隐藏掉运行时弹…...