c语言结构体学习上篇

文章目录

  • 前言
  • 一、结构体的声明
    • 1,什么叫结构体?
    • 2,结构体的类型
    • 3,结构体变量的创建和初始化
    • 4,结构体的类型
    • 5,结构体的初始化
  • 二、结构体的访问
    • 1,结构体成员的点操作符访问
    • 2,结构体体成员的指针访问


前言

昨天就是新的一年,小编看到了一句话送给各位读者:在过去的一年里,也许你踏足山巅,拥有团花锦簇的风光,也许你进入了低谷,经历了一个人的兵荒马乱,但是没关系的,去年千般未如愿,今年万事定称心。把过去的事儿,过去的人,一块尘封在记忆中不再烦恼,不再怀念。岁月本无语,未来犹可期,我始终如少年,你始终如初见。新的一年,我们看到了盛世的烟火,看到了繁华的街景,在c语言中写出烟花的代码可不是一个简单的小事情,他需要不断的积累,接下来我们学习结构体,在后面小编会给大家讲一些小的c游戏,烟花就需要用到结构体哦!


提示:以下是本篇文章正文内容,下面案例可供参考

一、结构体的声明

1,什么叫结构体?

结构就是一种集合
1,在之前我们学过很多数据类型,但是这些类型是内置类型,能描述的对象是非常有限的
2,但是生活中存在许多复杂对象,复杂对象就是不能用单一的数据去描述的,这时候为了方便描述复杂对象,于是c语言就有了结构体的概念
3,相比于结构体,数组是一组相同类型元素的集合,而结构是一些值的集合,这些值被称为成员变量,结构的每个成员可以是不同的类型

分析

就比如:我们划分一个人的特征
首先是性别,性别为男/女 ,我们存储这个性别用的类型为字符类型
再次是年龄,年龄肯定是正整数,我们定义一个有符号类型的整数来给年龄
然后是身高,身高是一个有小数点的数,所以我们这里可以用浮点型来定义身高
还有很多,在这里我们把人的特征集合在一起这个就是结构,然后这些特征被称为成员变量,每个成员
的变量类型可以相同可以不同

2,结构体的类型

语法形式

struct tag         
{
   member-list ;      
}  variable-list;  

例如:

//人的结构体类型声明
struct people
{
	char name[20]; //名字
	int age;       //年龄
	int height;    //身高
	char   sex[5];   //性别
}p1,p2;
int main()
{

	return 0;
}
分析

在这里tag就是结构体的标签,也就是要描述的东西,也就是复杂对象像上面的例子中的人;member-list是成员列表,在这里面声明成员类型,也就是定义变量,如上方例子中的年龄,性别,身高等;variable-list变量列表,就是我们用上面这个类型来创建变量,这里肯定会有疑惑的,比如int x = 0;这后面是不是有一个分号,然后我们不初始化就是int x;所以简单的来说:也就是说前面的内容都是结构体的类型,然后我们o就是结构体类型的变量。在上面代码中我们创建了两个结构体变量p1和p2.在这里p1和p2是全局变量。而我们在定义变量的时候要尽量用局部变量所以我们需要继续往后学习结构体的变量的创建

3,结构体变量的创建和初始化

在上面我们是在main函数外面声明的全局变量,接下来我们学习结构体的变量创建

struct people
{
	char name[20]; //名字
	int age;       //年龄
	int height;    //身高
	char sex[5];   //性别
};
int main()
{
	struct people p1 = { 0 };//结构体的局部变量
	return 0;
}
}
分析
在这里我们要区分一下结构体的类型是什么,结构体变量是什么,然后在上面你想给变量进行初始化就给他按照上面顺序类型给他赋值,用逗号隔开,不想初始化值,就局部初始全为0;注意这里和数组差不多一样的里面的成员很多,用大括号括起来。

在这里插入图片描述

4,结构体的类型

结构体的成员可以是标量,数组,指针,甚至可以是其他结构体

struct people
{
	char name[20]; //名字
	int age;       //年龄
	int height;    //身高
	char sex[5];   //性别
};
struct team
{
	struct people p;
	int num;
	int class;
};
int main()
{
	struct people p1 = { 0 };//结构体的局部变量
	return 0;
}
分析

在这里我们又创建了一个小组成员的结构体变量,在结构体变量里面我们定义了结构体people类型的变{}量p1,数量,和组别。这里是结构体内使用其他结构体。

5,结构体的初始化

struct people
{
	char name[20]; //名字
	int age;       //年龄
	int height;    //身高
	char sex[5];   //性别
};
struct team
{
	struct people p;
	int num;
	char class[5];
};
int main()
{
	//struct people p1 = { 0 };//结构体的局部变量
	struct people p1 = { "张三",20,175,"男" };
	struct team t = { {"张三",20,175,"男"} ,1,"经理" };
	return 0;
}

在这里插入图片描述

分析
然后在上面你想给变量进行初始化就给他按照上面顺序一一对应类别给他赋值,用逗号隔开,不想初始化值,就局部初始全为0;注意这里和数组差不多一样的里面的成员很多,用大括号括起来。然后结构体嵌套就在里面在加一个大括号描述另一个结构体内的成员就可以。如上方代码。打开监视窗口我们也可以发现它里面的存储情况和我们想的是一样的。如果不是一一对应的话他所赋值给的值不能给到相应的元素。然后出现下面这种情况。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/042756740f48458c9a9d9b3a8ff7a760.png)

二、结构体的访问

1,结构体成员的点操作符访问

结构变量的成员是通过点操作符(.)访问的。点操作符接受两个操作数,结构体变量.结构体成员

     <table><tr><td bgcolor=turquoise>分析  </td></tr></table>

在上面我们只是通过监视窗口来查看结构体内的成员,我们可以将他打印出来么接下来就要用到结构体的访问,也就是我们之前学习的操作符内的结构体操作符,结构体操作符详见小编所写的详解c语言操作符(下篇)

struct people
{
	char name[20]; //名字
	int age;       //年龄
	int height;    //身高
	char sex[5];   //性别
};
struct team
{
	struct people p;
	int num;
	char class[5];
};
int main()
{
	//struct people p1 = { 0 };//结构体的局部变量
	struct people p1 = { "张三",20,175,"男" };
	struct team t = { {"张三",20,175,"男"} ,1,"经理" };
	printf("%s %d %d %s\n",p1.name,p1.age,p1.height,p1.sex);
	printf("%s %d %d %s %d %s", t.p.name, t.p.age, t.p.height, t.p.sex,t.num,t.class);

	return 0;
}

在这里插入图片描述

分析

在这里,成员是内置类型不是指针,所以我们用变量名点成员来访问成员元素。

2,结构体体成员的指针访问

struct people
{
	char name[20]; //名字
	int age;       //年龄
	int height;    //身高
	char sex[5];   //性别
};
struct team
{
	struct people p;
	int num;
	char class[5];
};
void print(struct people* p)
{
	printf("%s %d %d %s\n", p->name, p->age, p->height, p->sex);
}
int main()
{
	//struct people p1 = { 0 };//结构体的局部变量
	struct people p1 = { "张三",20,175,"男" };
	struct team t = { {"张三",20,175,"男"} ,1,"经理" };
	//printf("%s %d %d %s\n",p1.name,p1.age,p1.height,p1.sex);
	//printf("%s %d %d %s %d %s", t.p.name, t.p.age, t.p.height, t.p.sex,t.num,t.class);

	print(&p1);
	return 0;
}

在这里插入图片描述

分析
在这里我们把之前的打印注释掉,然后我们创建一个print函数来打印结构体变量p1,在这里我们对他进行取地址,然后接受的就是结构体指针变量,在print函数里面打印结构体变量p1的成员,这时候的变量p是指针变量,我们就不能用点操作符来访问结构体成员了我们得用箭头操作符来访问找到指针结构体成员。如上面代码所示,我们运行后还是正确的结果。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于RetinaFace+Jetson Nano的智能门锁系统——第二篇(配置环境)

文章目录 设备一、安装远程登录终端Xshell1.1下载Xshell1.2新建回话1.3查询ip地址1.4启动连接 二、安装远程文件管理WinScp2.1下载WinScp2.2连接Jetson Nano2.3连接成功 三、安装远程桌面VNC Viewer3.1下载VNC Viewer3.2在Jetson Nano安装VNC Viewer3.3设置VINO登录选项3.4将网…

工具变量-ESG基金持股数据集(2008-2022年)

一、数据介绍 数据名称&#xff1a;工具变量-ESG基金持股数据 数据范围&#xff1a;A股上市公司 数据年份&#xff1a;2008-2022年 样本数量&#xff1a;41621条 数据来源&#xff1a;中国责任投资年度报告、上市公司年报 数据整理&#xff1a;自主整理 二、参考文献 […

C#中字母与ASCⅡ码的转换

目录 一、关于ASCⅡ及与字符互转 1.主要用到Encoding对象的GetBytes方法 2.Char显式转换为数值类型得到ASCⅡ 二、实例 三、生成效果 四、程序中的一些知识点 1.IsLetterOrDigit() 2.GetBytes() 3.TryParse(string, out int) 一、关于ASCⅡ及与字符互转 ASCⅡ(Americ…

【SpringBoot3】1.SpringBoot入门的第一个完整小项目(新手保姆版+教会打包)

目录 1 SpringBoot简单介绍1.1 SpringBoot是什么1.2 主要优点1.3 术语1.3.1 starter&#xff08;场景启动器&#xff09; 1.4 官方文档 2 环境说明3 实现代码3.1 新建工程与模块3.2 加入依赖3.3 主程序文件3.4 业务代码3.5 运行测试3.6 部署打包3.7 命令行运行 1 SpringBoot简单…

YoloV7改进策略:AAAI 2024 最新的轴向注意力|即插即用,改进首选|全网首发,包含数据集和代码,开箱即用!

摘要 https://arxiv.org/pdf/2312.08866.pdf 本文提出了一种名为Multi-scale Cross-axis Attention(MCA)的方法,用于解决医学图像分割中的多尺度信息和长距离依赖性问题。该方法基于高效轴向注意力,通过计算两个平行轴向注意力之间的双向交叉注意力,更好地捕获全局信息。…

Windows安装部署nginx

1、官网下载安装包&#xff1a; 官网地址&#xff1a;https://nginx.org/en/download.html 下载好后&#xff0c;解压即可&#xff1a; 在nginx的配置文件是conf目录下的nginx.conf&#xff0c;默认配置的nginx监听的端口为80&#xff0c;如果本地80端口已经被使用则修改成其…

强大的Git客户端 GitKraken 中文 for Mac

GitKraken提供了直观的图形化界面&#xff0c;让用户可以轻松地进行版本控制操作&#xff0c;而无需使用命令行界面。您可以通过可视化的工作区、分支图和提交历史&#xff0c;更清晰地了解代码的状态和演变。 跨平台支持&#xff1a;GitKraken可在多个操作系统上运行&#xf…

k8s之Pod的基础(上)

什么是pod&#xff1f; pod是k8s中最小的资源管理组件 pod也是最小运行容器化的应用的资源管理对象 pod是一个抽象的概念&#xff0c;可以理解为一个或者多个容器化应用的集合 在一个pod当中运行一个容器时最常用的方式 在一个pod当中同时运行多个容器&#xff0c;在一个po…

Docker之镜像上传和下载

目录 1.镜像上传 1) 先上百度搜索阿里云 点击以下图片网站 2) 进行登录/注册 3) 使用支付宝...登录 4) 登录后会跳转到首页->点击控制台 5) 点击左上角的三横杠 6) 搜索容器镜像关键词->点击箭头所指 ​ 编辑 7) 进入之后点击实例列表 8) 点击个人实例进入我们的一个…

凯越510X ADV欧洲上市,售价5.5万

凯越510X其实并不是一台新车&#xff0c;就是国内上市的双摇臂版本的525X&#xff0c;国内售价33900元&#xff0c;不过国外上市只有一个色&#xff0c;就是下方蓝黑灰的颜色&#xff0c;这个配色方案感觉还不错。 凯越525X作为国产中量级ADV3剑客&#xff0c;口碑销量一直都是…

Linux | 分布式版本控制工具Git【版本管理 + 远程仓库克隆】

文章目录 一、前言二、有关git的相关历史介绍三、Git版本管理1、感性理解 —— 大学生实验报告2、程序员与产品经理3、张三的CEO之路 —— 版本管理工具的诞生 四、如何在Linux上使用Git1、创建仓库2、将仓库克隆到本地3、git三板斧① git add② git commit③ git push 4、有关…

放弃努力必然下滑的2024

知道和做到&#xff0c;这其中有一道鸿沟。 努力不一定会成功&#xff0c;但是不努力连成功的概率都不会有。 问题 之前有朋友看过我的一些博文&#xff0c;问:"我如果不坚持写&#xff0c;仅靠存量能否维持一段时间&#xff1f;" "我如果不坚持写&#xff0c…

生态系统服务构建生态安全格局中的实践技术应用

生态安全是指生态系统的健康和完整情况。生态安全的内涵可以归纳为&#xff1a;一&#xff0c;保持生态系统活力和内外部组分、结构的稳定与持续性&#xff1b;二&#xff0c;维持生态系统生态功能的完整性&#xff1b;三&#xff0c;面临外来不利因素时&#xff0c;生态系统具…

3 - 字段约束|MySQL索引|MySQL用户管理

字段约束&#xff5c;MySQL索引&#xff5c;MySQL用户管理 字段约束主键外键 MySQL索引索引介绍优缺点索引使用规则索引的分类索引的管理 用户管理用户授权权限撤销 用户权限追加user表的使用 字段约束 设置在表头上&#xff0c;用来限制字段赋值 包括&#xff1a; 是否允许给…

Edge浏览器的卸载(一分钟版)

一分钟看完不耽误 开整工具下载后 结尾 开整 工具 Remove-MS-Edge 看名字&#xff0c;简单直接 CSDN下载 资源设置是免费的&#xff0c;大家尽管下载 不放心软件安全的话&#xff0c;自己上github地址下载也行 下载后 解压之后 我们打开有gui的&#xff0c;也就是有界面的&…

深度学习MLP_实战演练使用感知机用于感情识别_keras

目录 &#xff08;1&#xff09;why deep learning is game changing?&#xff08;2&#xff09;it all started with a neuron&#xff08;3&#xff09;Perceptron&#xff08;4&#xff09;Perceptron for Binary Classification&#xff08;5&#xff09;put it all toget…

webpack 5 loader

webpack 本身不能识别js&#xff0c;json外的资源&#xff0c;所以我们需要借助其他loader来处理对应的文件 CSS Loader&#xff0c;处理css 安装 npm i css-loader style-loader -D css-loader 负责讲css编译成webpack能识别的模块内容style-loader 动态创建<style&g…

基于SSM的社区管理系统论文

目 录 目 录 I 摘 要 III ABSTRACT IV 1 绪论 1 1.1 课题背景 1 1.2 研究现状 1 1.3 研究内容 2 2 系统开发环境 3 2.1 vue技术 3 2.2 JAVA技术 3 2.3 MYSQL数据库 3 2.4 B/S结构 4 2.5 SSM框架技术 4 3 系统分析 5 3.1 可行性分析 5 3.1.1 技术可行性 5 3.1.2 操作可行性 5 3…

mysql聚簇索引和非聚簇索引

目录 InnoDB引擎MylSAM引擎聚簇索引的优点和缺点参考 聚簇索引和非聚簇索引的区别&#xff1a;叶节点是否存放一整行记录。 聚簇索引:将数据存储与索引放到了一块,索引结构的叶子节点保存了行数据。 非聚簇索引:将数据与索引分开存储&#xff0c;索引结构的叶子节点指向了数据对…

分类预测 | Matlab实现DBO-SVM蜣螂算法优化支持向量机多特征分类预测

分类预测 | Matlab实现DBO-SVM蜣螂算法优化支持向量机多特征分类预测 目录 分类预测 | Matlab实现DBO-SVM蜣螂算法优化支持向量机多特征分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现DBO-SVM蜣螂算法优化支持向量机多特征分类预测&#xff08;完整…