结构体大小计算

举报
执久呀 发表于 2022/02/18 12:12:57 2022/02/18
【摘要】 ​目录一、前言 二、结构体的大小计算有以下几条规则:三、个人牛客网一、前言      在c语言中,要定义一个复杂对象比如说一个学生,用普通的变量是不可能定义完成的,所以这就有了我们的结构体,结构体就是是用来说明一个复杂对象的,所以结构体大小计算也成了重点。那我们应该怎么去计算结构体的大小呢,下面直接超级详细为你解答。举例一个结构体:struct st{char name;int age;do...


目录


一、前言 

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

三、个人牛客网



一、前言 

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


char name;
int age;
double money;
}s;


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


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

图片说明






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

图片说明


3,结构体最终大小是所有成员最大对齐数的整数倍16是8的整数倍,所以最终大小是16.
注意对于结构体套结构体中也是一样的算,结构体对齐数就是该结构体成员中最大对齐数,总结构体大小为所有成员(包括套的结构体)对齐数的(最小的)整数倍,如结构体所以成员最大对齐数是4,结构体算出来的大小是17,所以最终结果是20。(注意:最终结构体大小>=算出来的结构体大小)如:
struct aa
{ char c;
struct st s;//上面计算过的大小为20
int i;
}d
;
如图

图片说明


计算得到的的大小是32,所有成员最大对齐数是8,32是8的整数倍,故该结构体大小为32.
最后,#pragma pack()可以修改默认对齐数,如#pragma pack(2),修改默认对齐数为2。

图片说明


解释:

图片说明




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


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



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。