定义了结构体类型Student,具体如下:
struct Student {
int num;//0
char name[8];
double score;
} stu;
printf("%d\n", sizeof(stu)); //输出24,这个没有疑问
printf("%d\n", offsetof(student, name)); //输出偏移量为4
printf("%d", offsetof(student, score)); //输出偏移量为16
不理解的是:为什么成员name数组的偏移量为4,根据规则对齐数为成员自身大小与默认对齐数的最小值的整数倍,所以name数组的偏移量不是应该为8吗?
例如下面的例子:
struct Test {
int x;
double y;
} t1;
printf("%d\n", sizeof(t1));//输出16
printf("%d\n", offsetof(Test, y)); //输出8
这个例子中,double类型的成员y的偏移量就为8,而如果把y换成同样长度为8字节的字符数组,偏移量又变为4了,这是为什么呢?