现在的位置: 首页 > 综合 > 正文

华为面试题2

2018年03月21日 ⁄ 综合 ⁄ 共 494字 ⁄ 字号 评论关闭

设有以下说明和定义:

typedef union {long i; int k[5]; char c;}DATE;

struct data { int cat; DATE cow; double dog;} too;

DATE max;

则语句 printf("%d",sizeof(too)+sizeof(max));的执行结果是:______

答案:DATE是一个union, 变量公用空间. 里面最大的变量类型是int[5], 占用20个字节. 所以它的大小是20。

data是一个struct, 每个变量分开占用空间. 依次为int4 +DATE20 + double8 = 32.

所以结果是 20 + 32 = 52.

1. struct data 默认4字节对齐,与最大字节元素无关;

3.union 共用体的字节对齐情况类似,共用体的自身对齐按成员的最大元素字节对齐

3. Union放入struct 后,会改变struct 内存对齐的方式,将按union的字节对齐。

typedef union {long i; int k[5]; double d;}DATE; 按8字节对齐。

struct data { int cat; DATE cow; double dog;} too; 也将变成按8字节对齐。

抱歉!评论已关闭.