• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

碰到现在感觉指针最难得一道题啊 刀割求救 啊 求解释

边城 2014-04-13 浏览量:1474

#pragma pack(8)

struct teststruct4

{

char a;

long b;

};

struct teststruct5

{

char c;

teststruct4  d;

long long e;

};

#pragma pack();


求sizeof(teststruct5)


0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 现在感觉越往后看 月感觉C语言好像没有学过的 一样啊  越来越糊涂啊
    • 发布于 2014-04-13
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:15
  • #pragma pack(8)是按照8个字节对齐
    • 发布于2014-04-13
    • 举报
    • 评论 0
    • 0
    • 0

  • 那就帮我解释下啊,
    • 发布于2014-04-14
    • 举报
    • 评论 0
    • 0
    • 0


  • #pragma pack(8)

    struct teststruct4

    {

    char a;

    long b;

    };

    struct teststruct5

    {

    char c;

    teststruct4  d;

    long long e;

    };



    应该是48个字节

    第一个结构体占8个字节,这里按8位对其,char占1位,long占4位,加起来比8位小,所以占8位

    第二个结构体占24个字节,因为第一个char占1个字节,第二个结构体占8位,这里注意!这里默认占位是8位,char占1字节后,如果把结构体放入前8位,那么8+1>8,可以理解为放不下了,后一个longlong好理解

    • 发布于2014-04-14
    • 举报
    • 评论 0
    • 0
    • 0

  • TestStruct4 中,成员a 是1 字节默认按1 字节对齐,指定对齐参数为8,这两个值中取1,a
    按1 字节对齐;成员b 是4 个字节,默认是按4 字节对齐,这时就按4 字节对齐,所以
    sizeof(TestStruct4)应该为8;
    TestStruct5 中,c 和TestStruct4 中的a 一样,按1 字节对齐,而d 是个结构,它是8 个字节,它
    按什么对齐呢?对于结构来说,它的默认对齐方式就是它的所有成员使用的对齐参数中最大
    的一个, TestStruct4 的就是4.所以,成员d 就是按4 字节对齐.成员e 是8 个字节,它是默认按8
    字节对齐,和指定的一样,所以它对到8 字节的边界上,这时,已经使用了12 个字节了,所以又添
    加了4 个字节的空,从第16 个字节开始放置成员e.这时,长度为24,已经可以被8(成员e 按8
    字节对齐)整除.这样,一共使用了24 个字节.
    • 发布于2014-04-14
    • 举报
    • 评论 0
    • 0
    • 0

  • 是不是对齐 就是按最大的字节啊,大了还是按最大的对齐  小于最大补齐吗。
    • 发布于2014-04-14
    • 举报
    • 评论 0
    • 0
    • 0

  • #pragma pack(8) 就是说按8字节对齐。结构体对齐指出了结构体实际占的字节。
    • 发布于2014-04-14
    • 举报
    • 评论 0
    • 0
    • 0

  • 现在对对齐糊涂了啊
    • 发布于2014-04-14
    • 举报
    • 评论 0
    • 0
    • 0

  • http://www.sf.org.cn/Article/base/200509/260.html 参考这个文档在自己理解一下。
    • 发布于2014-04-14
    • 举报
    • 评论 0
    • 0
    • 0

  • 好资料,全力顶刀哥

    • 发布于2014-04-15
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

碰到现在感觉指针最难得一道题啊 刀割求救 啊 求解释