结构体大小计算

举报
执久呀 发表于 2022/02/18 12:12:57 2022/02/18
1k+ 0 0
【摘要】 ​目录一、前言 二、结构体的大小计算有以下几条规则:三、个人牛客网一、前言      在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

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

    全部回复

    上滑加载中

    设置昵称

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

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

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