struct{
short a1;
short a2;
short a3;
}A;struct{
long b1;
short b2;
}B;那么sizeof(A),sizeof(B) 多少啊?

解决方案 »

  1.   

    得看在什么系统、字节是怎样对齐的
    在32位系统、8字节对齐的情况下,sizeof(A) = 8
    sizeof(B) = 8
      

  2.   

    显然,sizeof(A)是6,sizeof(B)是8 啊
      

  3.   

    当然,这个问题,因为你没有说明处理器是多少位,所以答案不是唯一的,这里我给你个参考的说明吧。-------------------------------------------------------------
    A和B是结构体,在默认情况下,好像系统会做内存对齐的处理。当结构体内的元素的长度都小于处理器的位数时,便以结构体内最长的数据元素为对齐单位,结构体长度应该是最长的数据元素的整数倍。如果结构体内存在长度大于处理器位数的元素,那么就以处理器的位数为对齐单位。结构体A中,三个元素都是2字节的长度,所有,A的长度以2字节为对齐单位,所以应该是6,而且6也是2的整数倍。而结构体B中,b1为4字节,b2为2字节,则应该以4字节为对齐单位,所以,B的长度为 (2+4)+2=8 字节,后面的 (+2)是为了使B的长度为4的倍数而补足的两个字节,因为6不是4的倍数。大体就这样了。-------------------------------------------------------------
      

  4.   

    字节对齐的问题啊,和编译器有关.
    #pragma pack(N)  N是你对齐字节数,可以设置
    一般正常的是6和8啦,网上类似这个系统的文章很多的,楼主关注下.
    面试题,这个非常多,陷阱也多,但是大多嵌入式方向的.
      

  5.   

    #6 说得很详细了;在 VC 中,结构前后定义 
    #pragma pack(push, 1)
    struct A{
    ...
    };
    #pragma pack(pop)表示 1 字节对齐;你自己尝试一下 1, 2, 4, 8 ,调试看看内存,就明白了