精讲:结构体

大家好:

        衷心希望各位点赞。

        您的问题请留在评论区,我会及时回答。

一、结构体

        C语言中,结构体是用户根据实际问题而自行建立的一种数据类型,是由一系列相同或不同数据类型的数据构成的集合。在实际问题中,一个对象往往具有多个属性,需要一组不同类型的数据来表示。比如:手机通讯录中的一条记录应该包括编号、姓名、电话号码、性别、生日、地址等信息。显然单个基本数据类型或数组不能表达一条通讯记录,这时就需要用到结构体类型。结构体类型同C语言的基本数据类型一样,可以赋值、作为函数的参数、作为函数的返回值。

1、结构体定义

         结构体是由一个或多个变量组成的集合。这些变量称为结构成员,结构成员可以是相同类型,也可以是不同类型。结构体定义形式如下:

struct 结构体名
{数据类型 成员名;数据类型 成员名;数据类型 成员名;...
};

        结构体名是定义结构体数据类型的名字,在“{”和“}”之间的是结构体成员的列表,每一个结构体成员由一个数据类型和合法标识符组成。

        在程序中定义结构体时,需要注意结构体成员可以是另外一个结构体类型,比如:

struct Date
{int year;int month;int day;
};struct Person
{string name;struct Date birthday;
};

2、结构体使用

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

struct 结构体名 变量名;
struct 结构体名 变量名 = { 成员1值, 成员2值...};
定义结构体时,顺便创建变量。
#include <iostream>
#include <Windows.h>
#include <string>using namespace std;//创建学生数据类型:结构成员包括姓名、年龄、分数
//struct关键字不可省略
struct Student 
{//成员列表string name;//姓名int age;//年龄int score;//分数
}s3;//定义结构体时,顺便创建结构体变量int main(void) {//1、struct 结构体名 变量名;struct Student s1;//给s1的属性赋值s1.name = "张三";s1.age = 18;s1.score = 100;cout << "姓名:" << s1.name << " 年龄:" << s1.age << " 分数:" << s1.score << endl;//2、struct 结构体名 变量名 = { 成员1值, 成员2值... };struct Student s2 = { "李四", 17, 90 };cout << "姓名:" << s2.name << " 年龄:" << s2.age << " 分数:" << s2.score << endl;//3、定义结构体时,顺便创建结构体变量s3.name = "王五";s3.age = 16;s3.score = 80;cout << "姓名:" << s3.name << " 年龄:" << s3.age << " 分数:" << s3.score << endl;system("pause");return 0;
}

运行截图:

二、结构体数组

        结构体数组是具有相同结构体类型的变量的集合,可以用于存储和处理一批相同结构体类型的数据。结构体数组的每一个元素都是结构体类型数据,每一个元素都包括含该结构体类型的所有成员。

#include <iostream>
#include <Windows.h>
#include <string>using namespace std;struct Student 
{//成员列表string name;//姓名int age;//年龄int score;//分数	
};
int main(void) {//创建结构体数组struct Student stuArray[3];stuArray[0] = { "张三", 18, 100 };stuArray[1] = { "李四", 17, 90 };stuArray[2] = { "王五", 16, 80 };for (int i = 0; i < 3; i++) {cout << "姓名:" << stuArray[i].name << " 年龄:" << stuArray[i].age << " 分数:" << stuArray[i].score << endl;}cout << "----------" << endl;//创建结构体数组,同时赋初值struct Student stuArray1[3] = {{ "小明", 8, 100 },{ "小军", 7, 90 },{ "小红", 6, 80 }};for (int i = 0; i < 3; i++) {cout << "姓名:" << stuArray1[i].name << " 年龄:" << stuArray1[i].age << " 分数:" << stuArray1[i].score << endl;}system("pause");return 0;
}

运行截图:

三、结构体指针

        作用:通过指针访问结构体中的成员,利用指向运算符‘ -> ’可以通过结构体指针访问结构体成员。

#include <iostream>
#include <Windows.h>
#include <string>using namespace std;struct Student 
{//成员列表string name;//姓名int age;//年龄int score;//分数	
};
int main(void) {//创建结构体变量,并初始化struct Student stu = { "张三", 18, 100 };//创建结构体指针,并指向结构体变量struct Student* p = &stu;//结构体指针通过‘ -> ’访问成员cout << "姓名:" << p->name << " 年龄:" << p->age << " 分数:" << p->score << endl;system("pause");return 0;
}

运行截图:

 

四、结构体嵌套结构体

        定义:结构体中的成员可以是另外一个结构体。

        比如:每一个老师辅导一个学生,一个老师结构体中,记录一个学生结构体。

#include <iostream>
#include <Windows.h>
#include <string>using namespace std;struct Student 
{//成员列表string name;//姓名int age;//年龄int score;//分数	
};struct Teacher 
{int id; //教师编号string name;int age;struct Student stu; //辅导的学生
};int main(void) {struct Teacher t1;t1.id = 1000;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.stu.name<< " 年龄:" << t1.stu.age<< " 分数:" << t1.stu.score << endl;system("pause");return 0;
}

运行截图:

 

五、结构体作函数参数

        像其他普通类型一样,结构体类型也可以作为函数的参数类型和函数的返回值类型,用结构体变量作为函数实参,与普通变量作为函数实参没有区别,都是传值调用。在函数内部对其操作,不会引起结构体各个成员值的变化。

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

        传递方式有两种:值传递、地址传递

六、结构体中const使用场景

七、结构体案例

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/760037.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

node.js安装、npm镜像、vue cli脚手架安装

node.js、npm、vue/cli 文章目录 一、node.js安装二、包路径管理2.1 查看npm下载的默认路径2.2 更改路径2.3 配置环境变量2.4 安装cnmp&#xff08;npm镜像) 三、安装脚手架创建Vue项目3.1 安装脚手架3.2 创建项目 一、node.js安装 官网上下载&#xff0c;然后直接一路下一步 …

k8s为什么删除了pod但是还是没删除掉的问题,deployment在影响

deployment 影响pod删除 一、问题所在二、解决问题 一、问题所在 执行&#xff1a;kubectl get pods --all-namespaces&#xff0c;获取dashboard相关的pod kubectl get pods --all-namespaces | grep dashboardkubectl delete pod dashboard-metrics-scraper-546d6779cb-4x6…

解密Oracle数据库引擎:揭开数据存储的神秘面纱(二)

本系列文章简介&#xff1a; 本系列文章旨在揭开Oracle数据库引擎的神秘面纱&#xff0c;帮助大家深入了解其内部机制和工作原理。我们将从基础概念入手&#xff0c;逐步深入到数据库引擎的核心组件和技术细节。我们将探讨Oracle数据库引擎的存储结构、索引机制、事务处理、并发…

【Linux Day16 I/O复用】

I/O复用 用途&#xff1a;I/O 复用能同时监听多个文件描述符。 I/O 复用虽然能同时监听多个文件描述符&#xff0c;但它本身是阻塞的。并且当多个文件描述符同时就绪时&#xff0c;如果不采取额外的措施&#xff0c;程序就只能按顺序依处理其中的每一个文件描述符&#xff0c;…

如何使用“ubuntu移动文件、复制文件到其他文件夹“?

一、移动文件到其他文件夹命令 mv node_exporter-1.5.0.linux-amd64.tar.gz /usr/local/etc/prometheus 二、复制文件到其他文件夹命令 cp node_exporter-1.5.0.linux-amd64.tar.gz /home/master

java每日一题——幸运囚犯(合集遍历,查询数据练习)

前言&#xff1a; 合集基本学完了&#xff0c;做做题巩固下知识点。打好基础&#xff0c;daydayup! 题目如下&#xff1a; 目前有100名囚犯&#xff0c;每个囚犯的编号是1-200之间的随机数。现在要求依次随机生成100名囚犯的编号&#xff08;要求这些囚犯的编号是不能重复的&a…

CSS字体图标

文章目录 1. 概念2. 阿里图标 iconfont2.1. 网址2.2. 使用方法2.3. 注意事项2.3.1. 原因 3. font-awesome 图标3.1. 网址3.2. 使用方法 1. 概念 本质就是一个字体&#xff0c;可以灵活修改它的样式&#xff0c;降低服务器请求的次数&#xff0c;同时相比图片更加清晰。 2. 阿…

【Web APIs】DOM获取元素

目录 1.Web API基本认识 2.获取DOM元素 3.设置/修改DOM元素内容 4.设置/修改DOM元素属性 4.1修改元素常用属性 4.2修改元素样式属性 4.3设置/修改表单属性 5.定时器-间歇函数 1.Web API基本认识 作用&#xff1a;就是使用js去操作html和浏览器 分类&#xff1a;DOM&am…

windows访问远程服务器上容器的几种直接方式

远程服务器 host上有一个docker container&#xff0c;如何通过 client 直接登陆 container 呢&#xff1f; container 使用 host 的网络&#xff0c;即使用了 --networkhost先配置 container的 ssdh&#xff08;/etc/ssh/sshd_config&#xff09;&#xff0c;相关参数设置 po…

【Frida】10_用鼠标自动标记棋盘上的雷区(一键过关)

&#x1f6eb; 系列文章导航 【Frida】 00_简单介绍和使用 https://blog.csdn.net/kinghzking/article/details/123225580【Frida】 01_食用指南 https://blog.csdn.net/kinghzking/article/details/126849567【Frida】 03_初识frida-node https://blog.csdn.net/kinghzking/ar…

AI程序员诞生:对程序员的影响与未来展望

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;日常聊聊 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 方向一&#xff1a;AI程序员的优势分析 方向二&#xff1a;AI程序员局限性 方向三&#xff1a;对程序员职业的影响 方向四&…

【吊打面试官系列】Redis篇 - Redis 的回收策略(淘汰策略)?

大家好&#xff0c;我是锋哥。今天分享关于 Redis 的回收策略&#xff08;淘汰策略&#xff09;面试题&#xff0c;希望对大家有帮助&#xff1b; volatile-lru &#xff1a;从已设置过期时间的数据集&#xff08;server.db[i].expires&#xff09;中挑选最近最少使用的数据淘汰…

高通8255芯片首次烧写方法

高通8255芯片首次烧写需要进行分区烧写&#xff0c;方法如下&#xff1a; 目录 一&#xff1a;QFIL安装 二&#xff1a;关于QFIL详细文档 三&#xff1a;简要分区烧写方法 1烧写 meta build 2 然后重启一下机器 3 烧写 flat build 四&#xff1a;正常烧写程序 一&#…

成为高效Java工程师的干货笔记

&#x1f482; 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交流&#xff0c;摸鱼划水的小伙伴&#xff0c;请点击【全栈技术交流群】 作为一名Java工程师&…

好用电脑桌面便签是什么?电脑好用便签软件推荐

面对电脑屏幕&#xff0c;我常常感到一种无形的压力。繁杂的工作、琐碎的事务&#xff0c;仿佛都在这个小小的屏幕里与我争夺注意力。每当这时&#xff0c;我就特别需要一个能随时记录我重要事项的工具&#xff0c;让我能在忙碌中保持清醒的头脑。 有一天&#xff0c;我发现了…

产品|快!精!强!点点田企业版功能大升级

在诸如农业补贴、农情监测以及种植监管等场景中&#xff0c;农业遥感数据获取门槛高、行业客户软件开发经验不足等痛点一直存在。 针对这一挑战&#xff0c;珈和科技开发了点点田企业版产品&#xff0c;提供农业遥感数据服务&#xff0c;以API交付的方式降低数据获取门槛&…

外包干了1个月,技术明显进步。。。

我是一名大专生&#xff0c;自19年通过校招进入湖南某软件公司以来&#xff0c;便扎根于功能测试岗位&#xff0c;一晃便是近四年的光阴。今年8月&#xff0c;我如梦初醒&#xff0c;意识到长时间待在舒适的环境中&#xff0c;已让我变得不思进取&#xff0c;技术停滞不前。更令…

Uibot (RPA设计软件)财务会计Web应用自动化(批量开票机器人)

Uibot (RPA设计软件&#xff09;Mage AI智能识别&#xff08;发票识别&#xff09;———机器人的小项目友友们可以参考小北的课前材料五博客~ (本博客中会有部分课程ppt截屏,如有侵权请及请及时与小北我取得联系~&#xff09; 紧接着小北的前两篇博客&#xff0c;友友们我们…

[MTK6771] android13系统启用OMAPI 支持esim.me

OMAPI是啥&#xff1f;看看谷歌的解释&#xff1a; 说了一大堆懂的人不需要看&#xff0c;不懂的还是看不懂&#xff0c;我就是后者 总之说人话就是&#xff0c;像SIM卡&#xff0c;NFC这类模块需要用到这个东西&#xff0c;那么接着往下看 上层APP想要使用这个OMAPI供应商稳…

五、分支结构

一、程序的组织结构 无论程序是大是小&#xff0c;都可以用顺序结构、选择结构和循环结构表示 二、单分支结构 单分支结构&#xff1a;如果表达式的值是True就执行代码&#xff0c;如果表达式的值是False就跳过语句执行后面语句 ageint(input(请输入你的年龄&#xff1a;)) i…