【初阶C语言】学会结构体

1.结构体类型的声明
2.结构体初始化
3.结构体成员访问
4.结构体传参
 


前言:结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。

一、结构体类型的声明

1.结构的声明

结构体声明的模板:

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

    这是一个模板的声明,得出来的结构体只是一种类型,与int char一样。

例如,我们需要描述一个学生的信息,能用int类型来描述学生吗?显然是不行的,因为学生包括了学号(char),名字(char),年龄(int)和性别(char),所以这不是一个单一的类型,就需要用到结构体来描述该学生。

第一种声明方式:这个结构体的全名为:strcut Stu

struct Stu
{char name[20];//名字int age;//年龄char sex[5];//性别char id[20];//学号
};//这里的分号不能丢

第二种方式:重命名

typedef struct Stu
{
char name[20];//名字
int age;//年龄
char sex[5];//性别
char id[20];//学号
}Stu;//给结构体类型重新取名为Stu

重新命名的方式还可以这样:

struct Stu
{
char name[20];//名字
int age;//年龄
char sex[5];//性别
char id[20];//学号
};
typedef struct Stu Stu;//重新起一行来命名

第三种方式:在声明的时候创造变量

struct Stu
{char name[20];//名字int age;//年龄char sex[5];//性别char id[20];//学号
}S1;//这里的S1是结构体创造出来的全局变量

 上面一系列的操作都只是对一个结构体类型进行了声明而已,更多内容尽在后面。

2.结构体成员的类型

前言:在上面的模板我们可以知道,member_list是结构体成员,那结构体成员的类型可以是哪些呢?

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

struct A 
{char c;int a;
}; ​
struct B
{char b;int arr[10];struct A c;//成员为其他结构体成员struct A* F;//为指针类型
};

但是需要注意的是,结构体成员不可以是本身的结构体,但是可以是本身结构体指针。

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

在前面的时候,我们有介绍过在声明的时候创造的全局变量,接下来都一起介绍了。

第一种创造方式:

#include<stdio.h>
struct Stu
{char c;int arr[10];
};
int main()
{struct Stu A;//结构体变量Astruct Stu B;//结构体变量Breturn 0;
}

这里创造的变量A和B都是局部变量。

第二种创造方式:

#include<stdio.h>
typedef struct Stu
{char c;int arr[10];
}Stu;//对结构体重命名
int main()
{//struct Stu A;//结构体变量A//struct Stu B;//结构体变量BStu C;//结构体变量Creturn 0;
}

第三种方式:上面提到过的创造全局变量

#include<stdio.h>
struct Stu
{char c;int arr[10];
}D;//全局变量D
int main()
{//struct Stu A;//结构体变量A//struct Stu B;//结构体变量B//Stu C;//结构体变量Creturn 0;
}

在创建后变量后,就该对变量进行初始化了

初始化:

#include<stdio.h>
struct Stu
{char name[20];int age;double height;
};
int main()
{struct Stu s1 = {"zhangsan",20,182.8};//顺序初始化struct Stu s2 = {.age=18,.height=188.5};//指定成员初始化return 0;
}

在创建变量的时候就初始化:

struct Stu
{char name[20];int age;double height;
}s3 = {"lisi",19,150.6};//创造的全局变量并初始化

二、结构体成员的访问

当完成结构体的声明、结构体变量的创建和初始化后,就可以使用结构体了,这就是涉及到结构体成员访问的知识。

结构体的访问有两个操作符:'.'操作符和'->'操作符

接下来我们通过初始化和打印的两个操作来举例说明结构体成员访问的例子。

#include<stdio.h>
struct Stu
{double height;int age;
};
void set_s1(struct Stu* ps)//用结构体类型指针接收
{ps->age = 22;ps->height = 188.45;//用"->"操作符访问结构体成员
}
void print(struct Stu s)
{printf("%d %lf",s.age,s.height);
}
int main()
{struct Stu s1 = { 0 };//这里先初始化成0//用一个函数对结构体变量赋值set_s1(&s1);//因为需要修改值,所以必须要传址//用一个函数打印结构体变量中的数据print(s1);//只需要打印,不需要修改。传值就可以return 0;
}

我们看一下运行的结果:

 在上面的例子中,出现了两个操作符,具体什么时候用哪个我们总结一下。(.和->)

结构体变量.成员名        结构体指针->成员名

就是在用指针的时候,左边必须是->,另一个同样的道理。

通过上面的例子我们可以知道,结构体既可以传值,也可以传地址,接下来我们一起看看这两个的差异吧。

1.传参

传参的话,需要重新开辟的空间很会很大,并且有的情况下传值是不能达成要求的,因为形参是实参的一份拷贝

2.传址

传址可以适用于所有的情况,并且所需要重新开辟的内存不大,所以尽可能使用结构体传址的方法。

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

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

相关文章

某银行软件测试笔试题

&#xff08;时间90分钟&#xff0c;满分100分&#xff09; 考试要求&#xff1a;计算机相关专业试题 一、填空题&#xff08;每空1分&#xff0c;共10分&#xff09; 1. ______验证___是保证软件正确实现特定功能的一系列活动和过程。 2. 按开发阶段分&#xff0c;软件测试可…

寻找旋转排序数组中的最小值——力扣153

文章目录 题目描述解法 二分法 题目描述 解法 二分法 int findMin(vector<int>& nums){int l0, rnums.size()-1;while(l<r){int mid (lr)/2;if(nums[mid]<nums[r]) rmid;else lmid1;}return nums[l];}

【雕爷学编程】 MicroPython动手做(38)——控制触摸屏

MixPY——让爱(AI)触手可及 MixPY布局 主控芯片&#xff1a;K210&#xff08;64位双核带硬件FPU和卷积加速器的 RISC-V CPU&#xff09; 显示屏&#xff1a;LCD_2.8寸 320*240分辨率&#xff0c;支持电阻触摸 摄像头&#xff1a;OV2640&#xff0c;200W像素 扬声器&#…

git常用指令

git add命令 作用&#xff1a;移动文件&#xff1a;工作区-->暂存区 git add .&#xff1a;把所有文件都放到暂存区 git commit命令 作用&#xff1a;移动文件&#xff1a;暂存区-->本地仓库 git status命令 作用&#xff1a;查看修改状态 git log命令 作用&#xf…

小研究 - 主动式微服务细粒度弹性缩放算法研究(四)

微服务架构已成为云数据中心的基本服务架构。但目前关于微服务系统弹性缩放的研究大多是基于服务或实例级别的水平缩放&#xff0c;忽略了能够充分利用单台服务器资源的细粒度垂直缩放&#xff0c;从而导致资源浪费。为此&#xff0c;本文设计了主动式微服务细粒度弹性缩放算法…

c语言实现八大排序详细解析

首先先看排序算法的整体分类 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性&#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&#xff…

unity摄像机跟随玩家

1.下载摄像机包 2.创建摄像机 3.拖拽玩家

SOME/IP学习笔记1

SOA概念 在SOA中,每个服务就好像我们每一个人在社会中扮演的角色,在对别人提供着服务的同时,同时也享受着别人提供出来的服务,人与人之间,既是彼此独立的,又是需要互相通讯的。服务提供者将功能具象为一组接口,这样使用者就能知道如何调用服务,完成某件事情,得到某个…

如何编写一个易于维护的考试系统源码

编写一个易于维护的考试系统源码对于开发人员来说非常重要。一个易于维护的系统可以使代码更易于理解、修改和扩展&#xff0c;从而提高开发效率和系统稳定性。 第一步&#xff1a;良好的项目结构 良好的项目结构是一个易于维护的源码的基础。可以按照模块、功能或层次等方式…

为机器人装“大脑” 谷歌发布RT-2大模型

大语言模型不仅能让应用变得更智能&#xff0c;还将让机器人学会举一反三。在谷歌发布RT-1大模型仅半年后&#xff0c;专用于机器人的RT-2大模型于近期面世&#xff0c;它能让机器人学习互联网上的文本和图像&#xff0c;并具备逻辑推理能力。 该模型为机器人智能带来显著升级…

静态路由下一跳地址怎么确定(静态路由配置及讲解)

一、用到的所有命令及功能 ①ip route-static 到达网络地址 子网掩码 下一跳 // 配置静态路由下一跳指的是和当前网络直接连接的路由器的接口地址非直连网段必须全部做路由路径是手工指定的&#xff0c;在大规模网络上不能用&#xff0c;效率低&#xff0c;路径是固定的稳定的…

C++ 左值和右值

C 左值和右值 左值、右值左值引用、右值引用std::move()std::move()的实现引用折叠 完美转发forward()的实现函数返回值是左值还是右值如何判断一个值是左值还是右值 左值、右值 在C11中所有的值必属于左值、右值两者之一&#xff0c;右值又可以细分为纯右值、将亡值。在C11中…

RabbitMQ 教程 | 第5章 RabbitMQ 管理

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的编码爱好者 大家好&#xff0c;我是 DevO…

python解析帆软cpt及frm文件(xml)获取源数据表及下游依赖表

#!/user/bin/evn python import os,re,openpyxl 输入&#xff1a;帆软脚本文件路径输出&#xff1a;帆软文件检查结果Excel#获取来源表 def table_scan(sql_str):# remove the /* */ commentsq re.sub(r"/\*[^*]*\*(?:[^*/][^*]*\*)*/", "", sql_str)# r…

基于Java+Swing实现超级玛丽游戏

基于JavaSwing实现超级玛丽游戏 一、系统介绍二、功能展示三、其他系统 一、系统介绍 超级玛丽小游戏的JAVA程序&#xff0c;进入游戏后首先按空格键开始&#xff0c;利用方向键来控制的马里奥的移动&#xff0c;同时检测马里奥与场景中的障碍物和敌人的碰撞&#xff0c;并判断…

2023年电赛E题报告模板(K210版)--可直接使用

任务 图1 任务内容 要求 图2 基本要求内容 图3 发挥部分内容 说明 图4 说明内容 评分标准 图5 评分内容 正文 &#xff08;部分&#xff09; 摘要 本文使用K210芯片设计了一个运动目标控制与自动追踪系统。系统包括使用深度学习进行识别激光位置&#xff0c;其中红色激…

论文代码学习—HiFi-GAN(4)——模型训练函数train文件具体解析

文章目录 引言正文模型训练代码整体训练过程具体训练细节具体运行流程 多GPU编程main函数&#xff08;通用代码&#xff09;完整代码 总结引用 引言 这里翻译了HiFi-GAN这篇论文的具体内容&#xff0c;具体链接。这篇文章还是学到了很多东西&#xff0c;从整体上说&#xff0c…

数据分析基础-Excel图表的美化操作(按照教程一步步操作)

一、原始数据 包含月份和对应的销量和产量。 时间销量产量1月60722月38673月28344月58685月67596月72357月61428月24319月556710月243511月122112月2645 二、原始的图表设计-采用Excel自带模板 三、优化思路 1、删除多余元素 2、弱化次要元素 对于可以弱化的元素&#xff0c…

VMware vSphere整体解决方案及实验拓扑

VMware vSphere整体解决方案及实验拓扑 VMware vSphere完整的解决方案 VMware vSphere有两个核心组件&#xff1a;ESXI&#xff0c;vCenter。ESXI实现的是单机虚拟化&#xff0c;而vCenter实现集群虚拟化&#xff0c;把所有的ESXI统一进行管理。当然了&#xff0c;要想是实现…

构建vue项目配置和环境配置

目录 1、环境变量process.env配置2、vue package.json多环境配置vue-cli-service serve其他用法vue-cli-service build其他用法vue-cli-service inspect其他用法3、vue导出webpack配置4、配置打包压缩图片文件5、打包去掉多余css(由于依赖问题暂时未实现)6、打包去除console.…