朗讯的笔试题是这样的:
Typedef union student
{
Char name[10];
Long sno;
Char sex;
Float score [4];
} STU;
Main ()
{
STU a[5];
Printf(“%d/n”,sizeof(a);
}
答案是80 ,因为union是可变的以其成员中最大的成员作为 该union的大小!
但是换成是 struct又是多少呢?
Typedef struct student
{
Char name[10];
Long sno;
Char sex;
Float score [4];
} STU;
Main ()
{
STU a[5];
Printf(“%d/n”,sizeof(a);
}
答案是 180 ????为什么不是 (10+4+1+16)*5=155? 因为struct 有个叫对齐方式的问题:
不对齐的数据存取在x86上影响速度,因为在不对齐的时候,对于小的可能会影响 其效率,对齐即是多分配一些字节,填充无用数据,以空间的损失来换取消率。
struct是一种复合数据类型,其构成元素既可以是基本数据类型(如int、long、float