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

【C++】结构体

目录

1.结构体基本概念

2.结构体的定义和使用

3.结构体数组

4.结构体指针

5.结构体嵌套结构体

6.结构体做函数参数

7.结构体中const使用场景


1.结构体基本概念

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

2.结构体的定义和使用

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

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

1.struct 结构体名 变量名

2.struct 结构体名 变量名 = { 成员1,成员2......}

3.定义结构体时顺便创建变量

#include<iostream>
using namespace std//结构体定义
struct student{//成员列表string name; //姓名int age;     //年龄int score;   //分数}stu3; //结构体变量创建方式3int main
{//结构体变量创建方式1struct student stu1; //sturct 关键字可以省略stu1.name = "张三";stu1.age  = 18;stu1.score = 100;cout << "姓名:" << stu1.name << "年龄:" << stu1.age << "分数:" << stu1.score << endl;//结构体变量创建方式2struct student stu2 = { "李四",20,99 };cout << "姓名:" << stu2.name << "年龄:" << stu2.age << "分数:" << stu2.score << endl;//结构体变量创建方式3stu3.name = "王五";stu3.age = 22;stu3.score = 90;cout << "姓名:" << stu3.name << "年龄:" << stu3.age << "分数:" << stu3.score << endl;system("pause")return 0;
}

总结1:定义结构体时的关键字是struct,不可省略

总结2:创建结构体变量时,关键字struct可以省略

总结3:结构体变量利用操作符"."访问成员

3.结构体数组

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

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

#include<iostream>
using namespace std;//结构体定义struct student{//成员列表string name; //姓名int age;     //年龄int score;   //分数}int main() 
{//结构体数组struct student arr[3]={{"张三",18,80 };{"李四",19,60 };{"王五",20,70 };};for(int i = 0; i<3 ; i++){cout <<"姓名:"<<arr[i].name<<"年龄:"<<arr[i].age<<"分数:"<<arr[i].score<<endl;}system("pause");return 0;
}   

4.结构体指针

作用:通过指针访问结构体中的成员

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

#include<iostream>
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 -> score<<endl;system("pause");return 0;
}

总结:结构体指针可以通过 -> 操作符来访问结构体中的成员

5.结构体嵌套结构体

作用:结构体中的成员可以是另一个结构体、

例如:每一个老师辅导一个学员,一个老师的结构体中,记录一个学生的结构体

//学生结构体定义
struct student
{//成员列表string name; //姓名int age;     //年龄int score;   //分数 
};//教师结构体定义
struct teacher
{//成员列表int id;      //职工编号string name; //教师姓名int age;     //教师年龄struct student stu; //子结构体 学生
};int main()
{struct teacher t1;t1.id = 00001;t1.name = "老王";t1.age = 40;t1.stu.name = "张三";t1.stu.age = 18;t1.stu.score = 100;cout<<"教师 职工编号: "<< t1.id << "姓名: " << t1.name << "年龄: " << t1.age << endl;
cout<<"辅导学员 姓名: "<< t1.id << "年龄: " << t1.name << "分数: " << t1.age << endl;system("pause")return 0;
}

6.结构体做函数参数

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

传递方式有两种:1.值传递

                             2.地址传递

//学生结构体定义
struct student
{//成员列表string name; //姓名int age;     //年龄int score;   //分数
};//值传递
void printStudent(student stu)
{stu.age = 28;cout <<"子函数中 姓名:" << stu.name <<"年龄: "<< stu.age <<"分数:"<< stu.score <<endl;
}//地址传递
void printStudent2(student * stu)
{stu -> age = 28;cout <<"子函数中 姓名:" << stu->name <<"年龄: "<< stu->age <<"分数:"<< stu->score <<endl;
}int main()
{student stu = {"张三",18,100);//值传递printStudent(stu);cout <<"主函数中 姓名:" << stu.name <<"年龄: "<< stu.age <<"分数:"<< stu.score <<endl;cout << endl;//地址传递printStudent2(&stu);cout <<"主函数中 姓名:" << stu.name <<"年龄: "<< stu.age <<"分数:"<< stu.score <<endl;cout << endl;system("pause")return 0;
}

总结:如果不想修改主函数中的数据,用值传递,反之用地址传递

7.结构体中const使用场景

作用:用const来防止误操作

//学生结构体定义
struct student
{//成员列表string name; //姓名int age;     //年龄int score;   //分数
};//const使用场景
void printStudent(const student * stu) //加const防止函数体中的误操作
{//stu->age = 100; //操作失败,因为加了const修饰cout <<"姓名:" << stu->name <<"年龄: "<< stu->age <<"分数:"<< stu->score <<endl;
}int main()
{student stu = {"张三",18,100};printStudent(&stu);system("pause")return 0;
}  

相关文章:

【C++】结构体

目录 1.结构体基本概念 2.结构体的定义和使用 3.结构体数组 4.结构体指针 5.结构体嵌套结构体 6.结构体做函数参数 7.结构体中const使用场景 1.结构体基本概念 结构体属于用户 ---- 自定义的数据类型&#xff0c;允许用户储存不同的数据类型 2.结构体的定义和使用 语法…...

web架构师编辑器内容-拖动元素改变元素的位置和大小的完成

拖动移动元素 改变编辑器的定位系统 我们目前的元素都是按照块级元素直接自上而下的排列在画布中&#xff0c;为了让元素实现精确的定位和调整&#xff0c;我们需要改变这些元素的定位实现。我们需要让这些元素画布区域来进行绝对定位。如果我们有一个元素有这些已经保存的 c…...

基于CNN的水果识别-含数据集训练模型

数据集介绍&#xff0c;下载本资源后&#xff0c;界面如下&#xff1a; 有一个文件夹一个是存放数据集的文件。 数据集介绍&#xff1a; 一共含有:8个类别&#xff0c;包含:Apple, Banana, Cherry, Dragon Fruit, Mango, Orange, Papaya, Pineapple等。 然后本地的train.txt和…...

Hadoop基本概论

目录 一、大数据概论 1.大数据的概念 2.大数据的特点 3.大数据应用场景 二、Hadoop概述 1.Hadoop定义 2.Hadoop发展历史 3.Hadoop发行版本 4.Hadoop优势 5.Hadoop1.x/2.x/3.x 6.HDFS架构 7.Yarn架构 8.MapReduce架构 9.大数据技术生态体系 一、大数据概论 1.大数…...

2023年12月 Scratch 图形化(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch图形化等级考试(1~4级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 观察下列每个圆形中的四个数,找出规律,在括号里填上适当的数?( ) A:9 B:17 C:21 D:5 答案:C 左上角的数=下面两个数的和+右上角的数...

burp靶场--访问控制【越权】

【Burp系列】超全越权漏洞实验总结 https://portswigger.net/web-security/access-control/lab-unprotected-admin-functionality 1. 访问控制【越权】 https://portswigger.net/web-security/access-control#what-is-access-control ### 什么是访问控制&#xff1a; 访问控…...

C#使用DateTime.Now静态属性动态获得系统当前日期和时间

目录 一、实例 1.源码 2.生成效果 二、相关知识点 1.Thread类 &#xff08;1&#xff09;Thread.Sleep()方法 &#xff08;2&#xff09;Thread(ThreadStart) &#xff08;3&#xff09;IsBackground &#xff08;4&#xff09;Invoke( &#xff09; 2.CreateGrap…...

华为机考入门python3--(0)模拟题2-vowel元音字母翻译

分类&#xff1a;字符串 知识点&#xff1a; 字符串转list&#xff0c;每个字符成为list中的一个元素 list(string) 字符串变大小写 str.upper(), str.lower() 题目来自【华为招聘模拟考试】 # If you need to import additional packages or classes, please import …...

【轮式平衡机器人】——角度/速度/方向控制分析软件控制框架

轮式平衡机器人具有自不稳定性&#xff0c;可类比一级倒立摆系统的控制方法&#xff0c;常见有反馈线性化方法、非线性PID控制、自适应控制、自抗扰控制&#xff0c;还有改进的传统缺乏对外界干扰和参数改变鲁棒性的滑模变结构控制。我们采用较为简单的双闭环PID控制实现平衡模…...

HYBBS 表白墙网站PHP程序源码 可封装成APP

源码介绍 PHP表白墙网站源码&#xff0c;可以做校园内的&#xff0c;也可以做校区间的&#xff0c;可封装成APP。告别QQ空间的表白墙吧。 安装PHP5.6以上随意 上传程序安装&#xff0c;然后设置账号密码&#xff0c;登陆后台切换模板手机PC都要换开启插件访问前台。 安装完…...

【设计模式】适配器和桥接器模式有什么区别?

今天我探讨一下适配器模式和桥接模式&#xff0c;这两种模式往往容易被混淆&#xff0c;我们希望通过比较他们的区别和联系&#xff0c;能够让大家有更清晰的认识。 适配器模式&#xff1a;连接不兼容接口 当你有一个类的接口不兼容你的系统&#xff0c;而你又不希望修改这个…...

C语言应用层程序热补丁

一、热补丁简介 一个正在运行的程序&#xff0c;要是有某函数或某流程有问题&#xff0c;需要修改&#xff0c;有两个方式&#xff1a; 1.通过设置LD_PRELOAD把需要的库重新定向&#xff0c;但这种方式需要重启正在运行的程序。 2.通过修改可执行文件某个函数指向的地址&…...

【代码随想录+力扣hot100】双指针

文章目录 27. 移除元素思路&#xff1a;代码&#xff1a; 26. 删除有序数组中的重复项代码&#xff1a;思路一&#xff1a;重复元素必相邻思路二&#xff1a;从第一个位置开始考虑快慢指针 977.有序数组的平方思路&#xff1a;代码&#xff1a; 283. 移动零代码&#xff1a;思路…...

【Java程序员面试专栏 专业技能篇】MySQL核心面试指引(三):性能优化策略

关于MySQL部分的核心知识进行一网打尽,包括三部分:基础知识考察、核心机制策略、性能优化策略,通过一篇文章串联面试重点,并且帮助加强日常基础知识的理解,全局思维导图如下所示 本篇Blog为第三部分:性能优化策略,子节点表示追问或同级提问 读写分离 分布式数据库的…...

qnx 上screen + egl + opengles 最简实例

文章目录 前言一、qnx 上的窗口系统——screen二、screen + egl + opengles 最简实例1.使用 addvariant 命令创建工程目录2. 添加源码文件3. common.mk 文件4. 编译与执行总结参考资料前言 本文主要介绍如何在QNX 系统上使用egl和opengles 控制GPU渲染一个三角形并显示到屏幕上…...

python基础学习-02

基本的程序设计模式 任何的程序设计都包含IPO&#xff0c;它们分别代表如下&#xff1a; I&#xff1a;Input 输入&#xff0c;程序的输入 P&#xff1a;Process 处理&#xff0c;程序的主要逻辑过程 O&#xff1a;Output 输出&#xff0c;程序的输出 因此如果想要通过计算…...

服务调用Ribbon,LoadBalance,Feign

服务调用Ribbon、Fegin Ribbon实现负载均衡的原理 1&#xff1a;LoadBalancerAutoConfiguration这个类&#xff0c;这个类主要做的就是把LoadBalancer拦截器封装到RestTemplte拦截器集合里面去。 2&#xff1a;然后在代码里面调用restTemplate.getForObject或者其他方法的时候&…...

一条sql是如何运行的

在我们平时使用sql的时候&#xff0c;基本是基于黑盒的使用方式&#xff0c;在客户端输入一条sql语句&#xff0c;然后回显想要的数据&#xff0c;对于mysql server端内部如何运行的以及与存储引擎如何交互的不得而知。 通过下面一幅图&#xff0c;大致描述客户端和服务端交互…...

SystemC学习笔记(三) - 查看模块的波形

简述 波形在Simulation/Emulation中地位十分重要&#xff0c;尤其是在研发初期&#xff0c;只能通过波形来查看软件hang住的位置。 对于TLM来说&#xff0c;查看波形一般是指查看pvbus上的transaction&#xff0c;而对于SystemC本身来说&#xff0c;查看波形就是使用Gtkwave或…...

计算机网络(第六版)复习提纲5

SS2.2 有关信道的几个基本概念 2.通信模型 三个主要部分&#xff1a;信源、信道、信宿 3.通信方式: a)术语&#xff1a;消息&#xff08;传递的内容&#xff09;、数据&#xff08;传递的形式&#xff09;、信号&#xff08;数据表现形式&#xff0c;有模拟信号和数字信号两种&…...

JavaScript 学习笔记(WEB APIs Day3)

「写在前面」 本文为 b 站黑马程序员 pink 老师 JavaScript 教程的学习笔记。本着自己学习、分享他人的态度&#xff0c;分享学习笔记&#xff0c;希望能对大家有所帮助。推荐先按顺序阅读往期内容&#xff1a; 1. JavaScript 学习笔记&#xff08;Day1&#xff09; 2. JavaSc…...

Springboot自动装配:三个注解、Selector、spring.factories文件、@ConditionalOnProperty注解

借鉴&#xff1a; 这个链接是包含run方法进来debug看整个过程的&#xff0c;建议先看&#xff1a;https://www.cnblogs.com/starsray/p/15580915.html https://blog.csdn.net/fengxiandada/article/details/130080828 Springboot自动装配 1.创建springboot应用 如何创建一个s…...

软件工程应用题汇总

绘制数据流图(L0/L1/L2) DFD/L0&#xff08;基本系统模型&#xff09; 只包含源点终点和一个处理(XXX系统) DFD/L1&#xff08;功能级数据流图&#xff09;在L0基础上进一步划分处理(XXX系统) 个人理解 DFD/L2&#xff08;在L1基础上进一步分解后的数据流图&#xff09; 数据…...

P1789 【Mc生存】插火把(C语言)

首先&#xff0c;我们可以先用数组来储存地图&#xff08;建议用int&#xff0c;我试过bool会RE&#xff09; 每次读入火把和萤石的坐标 接着把能照亮的地方标记起来 最后用计数器统计会生成怪的地方有钻石的话还怕怪吗 最后&#xff0c;上代码 #include<stdio.h> i…...

计算机网络(第六版)复习提纲6

SS2.3 导引型传输媒体 1.三类位非导引型传输媒体 a)双绞线&#xff1a;两根铜线平行会相互干扰&#xff0c;垂直干扰最小&#xff0c;双绞线近似垂直&#xff0c;绞合度越高&#xff0c;可用的数据传输率越高。 i.无屏蔽双绞线UTP&#xff08;便宜&#xff09; ii.屏蔽双绞线&a…...

安卓平板局域网内远程控制工控机方法

安卓平板局域网内远程控制工控机方法 将所需要远程控制的工控机通过网线连接到具有WiFi功能的路由器上&#xff0c;将安卓平板连接上WiFi&#xff0c;如下图所示 下载NoMachine远程软件安装包&#xff0c;官网地址&#xff1a;https://www.nomachine.com/ 点击Download now按钮…...

pinctrl子系统简介

一. 简介 上一章我们编写了基于设备树的 LED 驱动&#xff0c;但是驱动的本质还是没变&#xff0c;都是配置 LED 灯所使用的 GPIO 寄存器&#xff0c;驱动开发方式和裸机基本没啥区别。 Linux 是一个庞大而完善的系统&#xff0c; 尤其是驱动框架&#xff0c;像 GPIO …...

基于51单片机的温度报警控制系统Protues仿真设计

目录 一、设计背景 二、实现功能 三、总体硬件设计 四、仿真演示 四、源程序 一、设计背景 随着现代工农业技术的发展及人们对生活环境要求的提高&#xff0c;人们也迫切需要检测与了解环境温度。特别地&#xff0c;高温情况下极易造成火灾&#xff0c;例如&#xff0c;在…...

多级缓存

一、多级缓存 传统的缓存策略一般是请求到达Tomcat后&#xff0c;先查询Redis&#xff0c;如果未命中则查询数据库&#xff0c;如图&#xff1a; 存在下面的问题&#xff1a; •请求要经过Tomcat处理&#xff0c;Tomcat的性能成为整个系统的瓶颈 •Redis缓存失效时&#xff…...

【已解决】如何用typedef简化函数指针

博文内容简短&#xff0c;主要介绍typedef简化函数指针&#xff0c;形式是typedef int(*pp)(int,int);并用一个加法的例子去演示&#xff0c;如何用typedef简化函数指针。 示例 #include<stdio.h> int add(int a,int b) {return a b; } typedef int(*p)(int, int); in…...