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

学习结构体

1.定义:

  • 结构体可以理解为自定义的数据类型
  • 是由一批数据组合而成的结构型数据

2.格式

#include <stdio.h>
int main()
{struct 结构体名字{成员1;成员2;……}return 0;
}
struct Teacher
{char name[100];int age;int workAge;
}

结构体:

  • 自定义的数据类型
  • 就是由很多的数据组合成的一个整体
  • 每一个数据,都是结构体的性质

书写的位置:

  • 函数的里面:局部位置,只能在本函数中使用
  • 函数的外面:全局位置,在所有的函数中都可以使用

练习:

另外:函数名如果太长也可以起别名

typedef struct
{成员1;成员2;……
}别名;//这个别名可以很短
使用时可以直接写别名.变量

练习:

3.结构体作为函数参数进行传递

函数中可以传递结构体

会出现两种情况:

  • 传递结构体中的数据值
  • 传递结构体的地址值

ps:如果要在函数中修改stu的值,此时就不要再定义一个新的变量了,直接接收stu的内存地址,通过内存地址(即指针)就可以修改stu中的数据了,指针st里记录的是main函数中stu的内存地址(stu 学生)

4.结构体的嵌套

如果结构体中成员的类型是其他的结构体,就用到了结构体的嵌套

注意:结构体嵌套批量赋值时,里面要再加一个大括号

练习:

5.综合练习

6.结构体内存对齐

  • 确定变量位置:只能放在自己类型整数倍的内存地址上
  • 内存对齐:不管是结构体还是普通变量,都存在内存地址
  • 规则:只能放在自己类型整数倍的内存地址上

比如:int类型的字节数为4,所以要接着放好的空间剩下的往下放在整数倍的位置上,然后依次挨着往下放4个,char类型的字节数为1,放哪都一样,只占一个空间

  • 另外,最开头放的直接从0位置开始放字节数,比如下面的double
  • 注意:

结构体的内存对齐要在上面的规则上加一条:结构体的总大小是最大类型的整数倍(用来确定最后一个数据的补位情况),注意对齐的时候会有一些位置空白,会补上空白字节,但这些不会影响到原来补上的类型的字节数,比如char补上后字节数依然为1

  • 心得:我们会把小的数据类型写在上面,大的写在下面,尽量地节约空间

图例:

操作验证:

http://www.xdnf.cn/news/1488925.html

相关文章:

  • 常见的内存泄露情况汇总
  • STM32 开发(三十三)STM32F103 片内资源 —— 直接存储 DMA 实战 编码详解
  • TypeORM 入门教程之 `@OneToOne` 关系详解
  • Day23_【机器学习—集成学习(5)—Boosting—XGBoost算法】
  • Python struct模块 | 使用pack函数进行字节序打包
  • k8s镜像推送到阿里云,使用ctr推送镜像到阿里云
  • Python实战:打造简易人脸识别门禁系统
  • MySQL 主从读写分离架构
  • UserManagement.vue和Profile.vue详细解释
  • Windows 内存整理和优化工具 - Wise Memory Optimize
  • Java初体验
  • 缓存无处不在
  • fps:AI系统
  • 2.TCP深度解析:握手、挥手、状态机、流量与拥塞控制
  • 火山 RTC 引擎15 拉流 推流 地址生成器 、合流转推 开关
  • Vulkan 学习(20)---- UniformBuffer 的使用
  • 【系统分析师】第7章-基础知识:软件工程(核心总结)
  • 计算机毕设选题:基于Python+Django的B站数据分析系统的设计与实现【源码+文档+调试】
  • 阿里云上启动enclave 并与宿主机通信
  • 韧性双核系统:个人与关系的共生进化框架
  • 2024理想算法岗笔试笔记
  • HTTP中Payload的含义解析
  • MySQL集群高可用架构——组复制 (MGR)
  • Set集合
  • matrix-breakout-2-morpheus靶机渗透
  • 【从零开始学习Redis】秒杀优化——阻塞队列、消息队列实现异步秒杀
  • 虚拟机之CentOS、网络设置的有趣问题
  • openpyxl和excel数据驱动
  • C++20格式化字符串:std::format的使用与实践
  • 大坝安全监测中的单北斗GNSS变形监测系统应用解析