野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 251005|回复: 815

【每日一题讲解】结构体的占用空间问题

  [复制链接]
发表于 2013-11-17 01:12:25 | 显示全部楼层 |阅读模式

  1. //假如 char 是 1个字节,double是8个字节,int是2个字节
  2. #pragma   pack(4)     
  3. typedef struct            
  4. {      
  5.     char a;     
  6.     double b;      
  7.     int  c;      
  8. }test;
  9. 求sizeof(test)的值?

  10. //A.13
  11. //B.14
  12. //C.16
  13. //D.24
复制代码
答案回复可见哦!
大家认真回答问题,认真思考一下,看完答案后还得思考一下。

昨天的题目,其实答案在 前天的问题上公布了,结果很多人依然打错。看见看看昨天的答对率吧:
QQ截图20131117001338.jpg

昨天题目:
【每日一题讲解】结构体的元素偏移问题 - 软件设计区 - 野火初学123论坛 http://www.firebbs.cn/forum.php? ... &extra=page%3D1

前天题目:
【每日一题讲解】结构体的内存大小问题 - 软件设计区 - 野火初学123论坛 http://www.firebbs.cn/forum.php?mod=viewthread&tid=1111

唉,答案提前一天公布,看来很多人看不懂或者没认真看。如果不懂的话,大家可以发帖咨询的哦。

今天的答案:
这题依然考结构体的内存对齐。
  1. #pragma   pack(4) //指定对齐方式为 4 字节对齐    
  2. typedef struct            
  3. {      
  4.     char a;   //占用 1个字节,后面填充 3个字节 (因为是 4字节对齐,而不是 8字节对齐,所以填充3而不是7)
  5.     double b; //占用 8个字节     
  6.     int  c;   //占用 2个字节,后面填充 2个字节   
  7. }test;
复制代码
答案:1 + 3 + 8 + 2 +2 = 16 ,为 C

如果大家对对齐方式不了解,看回这天的题目:
【每日一题讲解】结构体的内存大小问题 - 软件设计区 - 野火初学123论坛 http://www.firebbs.cn/forum.php?mod=viewthread&tid=1111

回复

使用道具 举报

发表于 2013-11-17 01:25:09 | 显示全部楼层
a按1对齐,b按8对齐,c按2对齐,结构体按最大的8对齐,对齐选24,错了!??
回复 支持 反对

使用道具 举报

发表于 2013-11-17 02:12:25 | 显示全部楼层
谢谢楼主,共同发展
回复 支持 反对

使用道具 举报

发表于 2013-11-17 02:16:21 | 显示全部楼层
答案。。。。。。。。
回复 支持 反对

使用道具 举报

发表于 2013-11-17 09:44:52 | 显示全部楼层
16答对

编译器中提供了#pragma pack(n)来设定变量以n字节对齐方式。n字节对齐就是说变量存放的起始地址的偏移量有两种情况:第一、如果n大于等于该变量所占用的字节数,那么偏移量必须满足默认的对齐方式,第二、如果n小于该变量的类型所占用的字节数,那么偏移量为n的倍数,不用满足默认的对齐方式。结构的总大小也有个约束条件,分下面两种情况:如果n大于所有成员变量类型所占用的字节数,那么结构的总大小必须为占用空间最大的变量占用的空间数的倍数;否则必须为n的倍数。
回复 支持 反对

使用道具 举报

发表于 2013-11-17 09:57:09 | 显示全部楼层
抢沙发~我来顶楼主的
回复 支持 反对

使用道具 举报

发表于 2013-11-17 10:31:58 | 显示全部楼层
♂荻夜 发表于 2013-11-17 09:44
16答对

编译器中提供了#pragma pack(n)来设定变量以n字节对齐方式。n字节对齐就是说变量存放的起始地 ...

少有答对的
回复 支持 反对

使用道具 举报

发表于 2013-11-17 10:34:34 | 显示全部楼层
fire 发表于 2013-11-17 10:31
少有答对的

前两天错了两次
回复 支持 反对

使用道具 举报

发表于 2013-11-17 10:39:38 | 显示全部楼层
火哥,又出题陷害我……又错了
回复 支持 反对

使用道具 举报

发表于 2013-11-17 13:03:25 | 显示全部楼层
16..............
回复 支持 反对

使用道具 举报

发表于 2013-11-17 14:25:48 | 显示全部楼层
前几天回答错了刚百度过,嘿嘿
回复 支持 反对

使用道具 举报

发表于 2013-11-19 12:04:25 | 显示全部楼层
抢沙发~我来顶楼主的真棒!!非常感谢
回复 支持 反对

使用道具 举报

发表于 2013-11-19 15:24:21 | 显示全部楼层
很关键的pack~
回复 支持 反对

使用道具 举报

发表于 2013-11-19 23:00:31 | 显示全部楼层
真棒!!非常感谢
回复 支持 反对

使用道具 举报

发表于 2013-11-19 23:01:12 | 显示全部楼层
真棒!!非常感谢
回复 支持 反对

使用道具 举报

发表于 2013-11-21 11:28:48 | 显示全部楼层
看看 啊啊 啊
回复 支持 反对

使用道具 举报

发表于 2013-11-24 09:47:55 | 显示全部楼层
真棒!!非常感谢
回复 支持 反对

使用道具 举报

发表于 2013-11-26 15:40:07 | 显示全部楼层
走过路过,不能错过
回复 支持 反对

使用道具 举报

发表于 2013-11-26 15:40:40 | 显示全部楼层
走过路过,不能错过
回复 支持 反对

使用道具 举报

发表于 2013-11-26 16:01:34 | 显示全部楼层
走过路过,不能错过
回复 支持 反对

使用道具 举报

发表于 2013-11-26 16:53:42 | 显示全部楼层
D,听了讲解明多了.
回复 支持 反对

使用道具 举报

发表于 2013-12-4 23:56:08 | 显示全部楼层
抢沙发~我来顶楼主的
回复 支持 反对

使用道具 举报

发表于 2013-12-9 01:12:17 | 显示全部楼层
这个应该是24字节
回复 支持 反对

使用道具 举报

发表于 2013-12-13 15:30:40 | 显示全部楼层
抢沙发~我来顶楼主的
回复 支持 反对

使用道具 举报

发表于 2013-12-14 20:14:52 | 显示全部楼层
我还是看答案吧。。。。
回复 支持 反对

使用道具 举报

发表于 2013-12-21 11:54:55 | 显示全部楼层
学习!!!!!!!!!!
回复 支持 反对

使用道具 举报

发表于 2013-12-23 10:10:34 | 显示全部楼层
看看答案~~
回复 支持 反对

使用道具 举报

发表于 2013-12-23 10:10:52 | 显示全部楼层
看看答案~~
回复 支持 反对

使用道具 举报

发表于 2013-12-25 14:55:50 | 显示全部楼层
大家要看到 #pragma 是4对齐的,所以是16
回复 支持 反对

使用道具 举报

发表于 2013-12-26 15:28:38 | 显示全部楼层
14强烈支持,非常感谢哥们
回复 支持 反对

使用道具 举报

发表于 2013-12-26 18:22:46 | 显示全部楼层
走过路过,不能错过
回复 支持 反对

使用道具 举报

发表于 2013-12-27 23:02:11 | 显示全部楼层
CCCCCCCCCCCCCCCC
回复 支持 反对

使用道具 举报

发表于 2014-1-5 20:14:37 | 显示全部楼层
答案应该是选C
回复 支持 反对

使用道具 举报

发表于 2014-1-5 21:24:14 | 显示全部楼层
看帖不回者 么有小JJ.........
回复 支持 反对

使用道具 举报

发表于 2014-1-7 11:41:53 | 显示全部楼层
大小为24...
回复 支持 反对

使用道具 举报

发表于 2014-1-7 11:42:21 | 显示全部楼层
大小为24...?
回复 支持 反对

使用道具 举报

发表于 2014-1-7 20:00:49 | 显示全部楼层
16    看答案罗
回复 支持 反对

使用道具 举报

发表于 2014-1-7 20:01:41 | 显示全部楼层
16    看答案罗
回复 支持 反对

使用道具 举报

发表于 2014-1-15 23:00:07 | 显示全部楼层
16.。。。。。。。。。。
回复 支持 反对

使用道具 举报

发表于 2014-1-22 23:15:54 | 显示全部楼层
走过路过,不能错过
回复 支持 反对

使用道具 举报

发表于 2014-1-26 22:08:17 | 显示全部楼层
D走过路过,不能错过
回复 支持 反对

使用道具 举报

发表于 2014-2-13 08:37:58 | 显示全部楼层
    我选11个
回复 支持 反对

使用道具 举报

发表于 2014-2-13 08:38:58 | 显示全部楼层
关键是不明白#progra是什么意思,所以错了
回复 支持 反对

使用道具 举报

发表于 2014-2-15 22:26:01 | 显示全部楼层
14,,,,,猜的,,,
回复 支持 反对

使用道具 举报

发表于 2014-2-19 16:47:46 | 显示全部楼层
学习知识了强烈支持,非常感谢哥们
回复 支持 反对

使用道具 举报

发表于 2014-2-26 22:04:08 | 显示全部楼层
这题应该是选A吧!
强烈支持,非常感谢哥们
回复 支持 反对

使用道具 举报

发表于 2014-3-3 13:57:28 | 显示全部楼层
d吗。。。。。。。。。
回复 支持 反对

使用道具 举报

发表于 2014-3-4 09:48:56 | 显示全部楼层

我是个凑数的
回复 支持 反对

使用道具 举报

发表于 2014-3-6 13:06:29 | 显示全部楼层
这么复杂的,看看答案
回复 支持 反对

使用道具 举报

发表于 2014-3-8 20:55:14 | 显示全部楼层
本帖最后由 真实的谎言 于 2014-3-8 20:57 编辑

1+7+8+4=20再+4=24  忘记了前提是4字节对齐了 应该是1 +3 +8+4 =16
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-4-27 08:08 , Processed in 0.044458 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表