51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 3064|回复: 4
打印 上一主题 下一主题

[求助] 下面两段程序分别输出什么?求解释?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2011-5-27 17:23:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
第一段:
        int x;
        struct B{
               int a;
               char b;
               short c;
        };
        x = sizeof(struct B);
        printf("%d\n",x);
第二段:
        int x;
        struct B{
               char b;
               int a;
               short c;
        };
        x = sizeof(struct B);
        printf("%d\n",x);
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2011-6-11 15:35:08 | 只看该作者
两个程序段不是一样的吗,有区别吗
都输出:x=9
把结构体内定义的变量所占用的字节数据加起来就是了
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2011-6-15 09:52:57 | 只看该作者
是不是要考虑对齐?
我C丢给大学了
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2011-7-4 15:53:18 | 只看该作者
sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2011-7-7 17:50:28 | 只看该作者
第一个输出8,第二个输出12;

操作系统要保持4字节对齐的哈
第一个结构体struct B{
               int a;
               char b;
               short c;
        };
系统给a分配了4字节,剩下的b和c分配了4字节,其中b占了前两个字节,c占了后两个字节。
第二个结构体struct B{
               char b;
               int a;
               short c;
        };
系统给b分配了4字节,因为后面a本身是整型就要占4字节。
系统给a也分配了4字节。
系统给c分配了4字节,尽管c只占两个字节哈

不知道这样解释明白了没,呵呵。
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-5-3 02:03 , Processed in 0.065914 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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