第一次写博客,而且是一个小萌新,有什么错误的地方请各位大佬及时提出来,我会立即更改,最后希望这篇文章能对你有帮助

大家对用struct关键字创建一个结构体应该不陌生,但是我们创建的结构体的空间大小怎么计算呢?

这里三个要点:

1.结构体成员代码由上往下执行。

2.结构体成员的地址偏移量(偏移量指的是相对于结构体起始位置的偏移量)应该是该成员所占空间的整数倍(否者就接着往后填充,直到是整数倍)。

3.最终结构体的空间大小是该结构体内所有成员的大小的整数倍(填充最小以满足要求)。

我们用两段代码来做比较

代码1:

#include<stdio.h>
struct S
{   char a;double b;int c;short d;
};
int main()
{struct S s;printf("%d\n",sizeof(s));return 0;
}

代码2:

#include<stdio.h>
struct S
{   int c;char a;short d;double b;
};
int main()
{struct S s;printf("%d\n",sizeof(s));return 0;
}

两段代码仅仅是结构体成员位置不同,最终运行的结果也有可能不相同。

代码1的运行结果

代码2的运行结果

我们来详细了解一下要点2:

我们还是看代码1的结构体各成员地址

成员a的地址是 0x0113FA0C 偏移量是0(偏移量指的是相对于结构体起始位置的偏移量),成员b为double型,占8个字节,向后填充,满足偏移量是8, 然后 0x0x0113FA14 偏移量是8的倍数,所以成员b的地址为0x0x0113FA14。后面的以此类推。

直到结构体最后一个成员的地址,所以 1 + 7 + 8 + 4 + 2 = 22(蓝色的为填充部分)可是运行结果明明是24啊,不着急,我们来看要点3

要点3详解:

我们的结构体最终大小是该结构体内的所有成员的大小的整数倍,我们再看上图,算出占22个字节空间,可是22不是8的倍数,向后填充,满足最小填充为24,所以结果为24。

C语言计算出结构体所占空间大小相关推荐

  1. 关于C语言中的结构体所占的字节数 sizeof(struct)

    C语言中的结构体所占的字节数 ,用sizeof求一个结构体的大小 C语言中用sizeof求结构体所占字节数的详细方法. 一.非嵌套结构体 struct one{char a; // 1(char所占字 ...

  2. C++_类和结构体所占内存大小,静态成员问题

    C++_类和结构体所占内存大小,静态成员问题 静态成员未初始化或者未调用(当然静态成员必须类外初始化才能调用)是不占内存的.静态成员不占类或结构体的内存 静态成员函数同样只声明未定义同样不占内存 指针 ...

  3. 共用体和结构体所占内存大小的计算方法

    共同体作用:让几个不同类型的变量共享同一个内存地址. 共用体所占内存大小:共用体所占内存的大小即公用体中长度最大元素所占用的字节数. #include<stdio.h> typedef u ...

  4. 如何计算结构体所占字节大小

    结构体的大小并不是简单的内部结构加加加,而是有特殊的对齐规则. 一.对齐数 struct name { int a;//一个成员 char b; double c; }; 在此之前需要引入一个对齐数的 ...

  5. C语言中各种基本数据类型所占空间大小(32位)

    基本数据类型包括以下 char //字符数字类型 1个字节=8个bit位 short //短整型 2个字节 int //整形 4个字节 long//长整型 4/8个字节 long long//更长的整 ...

  6. C语言编程题—结构体—设计程序,已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。请编写函数 fun:找出成绩最低的学生记录,通过形参返回主函数(规定只有一个最低分

    4 C语言编程题--结构体 **设计程序,已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中.请编写函数 fun,函数的功能是:找出成绩最低的学生记录,通过形参返回主函数(规定只有 ...

  7. new 一个结构体数组_C语言结构体到底占多少内存?简单!一文助你解决结构体内存问题...

    前言 本文主要介绍的是C/C++中 结构体的所占用内存问题做以分析,希望对于广大读者有一些帮助.在编写C语言一下程序的时候: struct data{int iNum;float fNum;long ...

  8. 结构体所占字节数的计算

    结构体所占字节数遵循以下原则: 1. 结构体的大小等于结构体内最大成员大小的整数倍 2. 结构体内的成员的首地址相对于结构体首地址的偏移量是其类型大小的整数倍,比如说double型成员相对于结构体的首 ...

  9. Linux结构体变量报错,C语言中的结构体

    用户自己建立自己的结构体类型 1.  定义和使用结构体变量 (1).结构体的定义 C语言允许用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体. (2).声明一个结构体类型的一般形式为: ...

最新文章

  1. 【CCD图像检测】0:开篇总述
  2. HBase的安装、写入和查询操作
  3. PaddlePaddle训练营——公开课——AI核心技术掌握——第1章迈入现代人工智能的大门——多层感知机网络模型
  4. 818. Race Car
  5. 深入解读 Knative Eventing 0.7 版本新特性
  6. halcon窗体的移动和缩放_halcon与C#联合编程之鼠标控制图片缩放,拖动,roi
  7. 学生选课系统代码-1start.py代码
  8. 区块链技术指南学习(一)未来已来
  9. 用python写一个简单的贪吃蛇游戏(附代码)
  10. 【华人学者风采】李进 广州大学
  11. 十分钟理解线性代数的本质_线性代数的本质
  12. 攻城狮还是产品运营?
  13. Linux之用户和组账户管理命令
  14. 贝叶斯模型构建分类器的设计与实现
  15. Win11自带微软浏览器无法翻译
  16. 索引颜色图模式和LAB颜色模式区别
  17. IE无法查看源文件原因及解决办法
  18. 横空出世,互联网的前世今生
  19. MFC中添加GIF图片
  20. 微信端视频播放防被浏览器劫持

热门文章

  1. calico 打通研发电脑到POD的访问
  2. QQ登录, 腾讯开放平台和QQ互联的坑
  3. XShell安装报错1605或1608
  4. python爬取哔哩哔哩网站数据以及弹幕
  5. 欧几里得《几何原本》电子版的内容大纲
  6. 创建Python3虚拟环境失败问题跟进
  7. java恒大集团面试经验,恒大集团面试经验
  8. 如何使用拟我表情做为用户的头像
  9. 有一个美女程序媛是一种什么样的体验,分享一下她所推荐的学习资料给你
  10. 【回收站】恢复oracle中误删除drop掉的表