字节对齐的奇怪问题
#include <stdio.h>
struct
{
int i;
double d;
}s;
int main()
{
printf("%d\n", (&(s.d)) - (&(s.i))); // 1
int d = &(s.d); // 2
int i = &(s.i);
int tmp = d - i;
printf("%d\n", tmp);
system("pause");
return 0;
}
这个程序句子1处编译不过,想不通为什么c语言这样设置,虽然结构体在存储时会对齐,可是也是有规则的啊,怎么会设置成不能这样求地址差?而句子2开始的地方也是一样的意思,编译可以通过,求出的值也正确。
第二个问题就是在gcc下求sizeof ( s )是16。可是我在书上看过,linux对除了char和short的类型,比如int,double都是四字节对齐。那么应该就是一共12才对啊?怎么会16