结构体大小计算

简介: 目录一、前言 二、结构体的大小计算有以下几条规则:三、个人牛客网


一、前言


 在c语言中,要定义一个复杂对象比如说一个学生,用普通的变量是不可能定义完成的,所以这就有了我们的结构体,结构体就是是用来说明一个复杂对象的,所以结构体大小计算也成了重点。那我们应该怎么去计算结构体的大小呢,下面直接超级详细为你解答。

举例一个结构体:struct st

{

char name;

int age;

double money;

}s;


二、结构体的大小计算有以下几条规则:

1.结构体的第一个成员放在偏移量为0的位置如图:


微信图片_20220104224959.png


2.后面的变量放在对齐数整数倍上(对齐数一般是改成员变量大小如int为4),对齐数是编辑器默认对齐数与成员变量的大小取他们两个的最小值vs编辑器默认对齐数是8


微信图片_20220104225037.png


3,结构体最终大小是所有成员最大对齐数的整数倍16是8的整数倍,所以最终大小是16.


注意对于结构体套结构体中也是一样的算,结构体对齐数就是该结构体成员中最大对齐数,总结构体大小为所有成员(包括套的结构体)对齐数的(最小的)整数倍,如结构体所以成员最大对齐数是4,结构体算出来的大小是17,所以最终结果是20。(注意:最终结构体大小>=算出来的结构体大小)如:

struct aa

{ char c;

struct st s;//上面计算过的大小为20

int i;

}d;如图


微信图片_20220104225119.png


计算得到的的大小是32,所有成员最大对齐数是8,32是8的整数倍,故该结构体大小为32.


最后,#pragma pack()可以修改默认对齐数,如#pragma pack(2),修改默认对齐数为2。


image.png


解释:


微信图片_20220104225242.png


三、个人牛客网


以上就是计算结构体的全部内容了,觉得还可以的点个赞,觉得哪里不足的评论区留言。

微信图片_20220104225316.png


祝各位小伙伴们学有所成,早日拿到offer


目录
相关文章
|
算法 程序员 C语言
C/C++原子操作与atomic CAS底层实现原理
假定有两个操作A 和B,如果从执行A 的线程来看,当另一个线程执行B 时,要么将B 全部执行完,要么完全不执行B,那么A 和B 对彼此来说是原子的。
1475 1
C/C++原子操作与atomic CAS底层实现原理
|
6月前
|
机器学习/深度学习 人工智能 自然语言处理
Transformer架构深度解析:重新定义序列建模的革命
Transformer是一种基于自注意力机制的神经网络架构,2017年由Google提出,彻底摒弃了RNN的循环结构,实现并行化处理序列数据。其核心通过QKV机制捕捉长距离依赖,以“圆桌会议”式交互提升效率与性能,成为大模型时代的基石。
|
缓存 Linux 开发工具
CentOS 7- 配置阿里镜像源
阿里镜像官方地址http://mirrors.aliyun.com/ 1、点击官方提供的相应系统的帮助 :2、查看不同版本的系统操作: 下载源1、安装wget yum install -y wget2、下载CentOS 7的repo文件wget -O /etc/yum.
271892 0
|
11月前
|
机器学习/深度学习 人工智能 自然语言处理
2025人工智能证书|2025年人工智能行业AI证书如何选择?
在2025年AI浪潮中,生成式AI已成为职场核心竞争力。企业招聘将“AI能力”设为基础门槛,如何选择有价值的AI认证?本文从行业趋势、证书价值、备考策略及职业规划四大维度解析。GAI认证由培生推出,涵盖核心技术与实际应用,结合理论与实践考核,助力职业发展。它不仅评估技术能力,还注重伦理法律等复合技能。备考需分阶段规划,善用官方资源,注重实践。无论转型、深耕还是管理晋升,GAI认证均适合作为起点,抢占AI时代先机。
|
机器学习/深度学习 C语言
函数递归(Recursion)一篇便懂
本文详细介绍了递归的概念、C语言中的递归函数实现、递归的两个重要条件,通过实例演示了阶乘和汉诺塔问题的递归解决方案,并对比了递归与迭代的区别。作者强调了递归在特定场景下的优势和潜在问题,提示读者在实际编程中灵活选择方法。
1458 0
|
机器学习/深度学习 人工智能 自然语言处理
AIGC技术发展与应用实践(一文读懂AIGC)
AIGC(人工智能生成内容)是利用AI技术生成文本、图像、音频、视频等内容的重要领域。其发展历程包括初期探索、应用拓展和深度融合三大阶段,核心技术涵盖数据收集、模型训练、内容生成、质量评估及应用部署。AIGC在内容创作、教育、医疗、游戏、商业等领域广泛应用,未来将向更大规模、多模态融合和个性化方向发展。但同时也面临伦理法律和技术瓶颈等挑战,需在推动技术进步的同时加强规范与监管,以实现健康可持续发展。
|
设计模式 算法 Java
Java中的if-else if-else语句
Java中的if-else if-else语句
838 1
|
存储 数据库 索引
faiss 三种基础索引方式
faiss 三种基础索引方式
1282 1
|
Ubuntu
修改虚拟机Ubuntu为桥接模式的静态IP
修改虚拟机Ubuntu为桥接模式的静态IP
1494 0
|
存储 编译器 C语言
【C++ 模板编程 实用手段】深入理解 C++ 中的 packaged_task、invoke_result_t、bind、result_of 和 Lambda
【C++ 模板编程 实用手段】深入理解 C++ 中的 packaged_task、invoke_result_t、bind、result_of 和 Lambda
521 0