C/C++知识点

结构体对齐

题目 1

题目:给定结构体,请问他的 sizeof 大小?

struct data{char t1;char t2;unsigned short t3;unsigned long t4;
};

答案:

我们这里假设用的是 32 位的系统,所以一次最多能取 4 个字节。先定义 t1t2 发现都是 char 类型,所以会一共定义 2 个字节空间。

t3short 类型,会正好填满上面剩下的 2 个字节空间。

t4int 会另外再开 4 个空间,故 sizeof 大小为 8 个字节。

t1 t2 t3 t3
t4 t4 t4 t4

题目 2

题目:给定结构体,请问他的 sizeof 大小?

struct data{char t1;int t2;short t3;
};

答案:

因为结构体对齐的默认原则就是按顺序定义类型时,只要遇到更大的类型,那么之后定义空间时就按最大的类型空间来定义。

我们这里还是假设用的是 32 位的系统,一次最多能取 4 个字节。所以 t1 会先定义 1 个空间,但是后面遇到了 t2int 类型,而最多一次只能取 4 个字节,t2 如果定义在 t1 后面就无法一次性取完,则 t1 后面剩下的 3 个空间会被空出来,而再定义 4 个空间给 t2

t3short 类型即占 2 个字节,但是由于已经遇到更大的类型 int ,所以这里还是会开 4 个字节给 t3 ,故 sizeof 大小为 12 个字节。

t1 ×  ×  ×
t2 t2 t2 t2
t3 t3 ×  ×

C语言面试题 - 结构体对齐相关推荐

  1. C语言结构体对齐[转]

    C语言结构体对齐也是老生常谈的话题了.基本上是面试题的必考题.内容虽然很基础,但一不小心就会弄错.写出一个struct,然后sizeof,你会不会经常对结果感到奇怪?sizeof的结果往往都比你声明的 ...

  2. C语言之结构体以及结构体对齐访问

    1:简单理解,结构体就是数组的进一步发展,数据的优点和缺陷在于数据里面是元素类型必须相同,但是结构体没有这个要求,结构体里面元素的类型可以相同也可以不同. 2:结构体的定义: struct stude ...

  3. C语言 泛型链表 如何计算(结构体中各元素)相对内存地址?(字节对齐,结构体对齐)offsetof()函数 ( (struct X*)0 ) -> Y)语法(匿名结构体)

    示例: typedef struct _user {char name[20];char sex[20];int age;struct list_head mylist;//自定义结构体里保存双向循环 ...

  4. C语言结构体对齐的不足

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105065657 C ...

  5. linux windows 结构体,Linux下C语言——结构体对齐

    结构体对齐的步骤: 1.结构体各成员对齐 2.整个结构体圆整 结构体对齐的特定对齐值: 1.自身对齐值: 自身对齐值就是结构体变量里每个成员的自身大小; 2.指定对齐值: 指定对齐值是由宏#pragm ...

  6. C语言结构体对齐详解

    文章目录 一.C语言结构体对齐大小快速判断 二.反汇编角度看结构体 三.总结 一.C语言结构体对齐大小快速判断 在C语言中定义一个结构体,里面具体占用多少个字节呢,先举一个例子,如下: #includ ...

  7. C语言结构体对齐,超详细,超易懂

    结构体对齐规则 结构体的第一个成员总是存放在结构体变量开辟的空间的起始地址 其它成员变量要存储在一个名叫对齐数的整数倍的地址 结构体总大小为最大对齐数的整数倍,结构体内每一个变量都会产生一个对齐数,取 ...

  8. 这个结构体对齐输出有意思

    这个题目是我在群里看到大家讨论的,既然是讨论的了,那我就拿出来说说,因为笔试面试的时候,可能就会遇到这样的题目. 实例代码 #include "stdio.h" #include ...

  9. Go语言基础之结构体

    转载地址:https://www.liwenzhou.com/posts/Go/10_struct/ Go语言中没有"类"的概念,也不支持"类"的继承等面向对象 ...

  10. C语言如何获取结构体中指定元素的大小?sizeof ( (X*)0 ) -> Y)(空指针操作)

    获取结构体的大小,这好办,这样就可以了: #include <stdio.h>struct user {char name[20];char age[10]; };int main() { ...

最新文章

  1. wireshark抓包分析tcp连接与断开
  2. body 没有被撑开_body没有高度设置背景色为什么可以全屏显示?
  3. php date( ymd_PHP-date(),time()函数的应用
  4. [ASP.NET Core 3框架揭秘] 依赖注入:依赖注入模式
  5. linux内核那些事之early boot memory-memblock
  6. android自助终端界面_滨州市人社自助服务终端上线新功能可查询个人在山东省所有地市的参保信息...
  7. 关于VXLAN实验中CE设备的BUG问题
  8. 2021年最新Java学习路线图指南
  9. Ubuntu18.04无法安装软件的问题
  10. word文档中表格顶头怎么调整_教你用Word制作专用信纸,轻松几步就完成
  11. 深度学习笔记----计算机视觉的任务及对应的网络模型
  12. Oracle Enterprise Manager Cloud Control 13c 配置——设置页面不失效
  13. Java 遍历Map常见的五种方法
  14. 上海最牛逼的75家互联网公司
  15. 根据cmd.exe的文件路径,30秒新建cmd快捷方式,并以管理员身份运行(保姆级图文)【杂记】
  16. 恶意代码分析实战 8 恶意代码行为
  17. 649. Dota2 参议院
  18. Ignite安装配置——上篇
  19. pyspark基础学习——数据处理
  20. python锁_Python中四种锁的使用示例(代码)

热门文章

  1. matlab生成浮雕灰度图,将照片做成浮雕灰度图
  2. 渗透测试报告模板_演习防守方总结模板写作公式
  3. 新手小白如何做自媒体自媒体入门视频教程(3G教程)
  4. python3 爬虫 HTTP Error 403:Forbidden
  5. 工程物资云平台_SaaS产品设计说明书(PRD)_施工企业工程项目物资材料管理软件系统
  6. 浪涌保护器ant120_菲尼克斯浪涌保护器
  7. android 卡片消息,安卓QNotified 支持xml卡片QQ消息 - 陌路人博客
  8. 用Java写脚本,常用的一些方法
  9. NoteExpress 学校集团版本 校园网导入EI题录
  10. html向上移动图片代码,图片随网页上下移动的代码实例