2

填空题 2 /66

在32位机器上
设有以下说明和定义:
typedef union {
    long i; 
    int k[5]; 
    char c;
} DATE;
struct data { 
    int cat; 
    DATE cow; 
    double dog;
} too;
DATE max;
则语句 printf("%d",sizeof(struct data)+sizeof(max));的执行结果是:1

参考答案

    这道题可能很多同学都有误区,不明白内存对齐的真正含义,那么下面我来讲解一下,首先共用体里面你们肯定都是明白的,DATE是一个union, 变量公用空间. 里面最大的变量类型是int[5], 占用20个字节. 所以它的大小是20 。
但是到了结构体里面,其实它是这样的,首先一个Int,然后后面5个int,再然后是一个double,所以最大的成员长度是8不是20,然后6个int刚刚24,然后加上8是32,加上共用体是52,如果你把第一个Int cat去掉,你仍然会发现,结构体大小还是32,因为8个字节内存对齐,前面2个int一组,最后还单一个int也要占8个字节。希望能对内存对齐不明白的童鞋有所帮助。