-----file tt.c------机器和OS都是64位的
#include <stdio.h>
int main(){
unsigned long *a;
unsigned long *b;
unsigned long c;
a = &c;
b = (unsigned long *)((unsigned long)a + 100);
printf("b - a is %d \n", b - a);
printf("addr of b is %lx \n", b);
printf("addr of a is %lx \n", a);
return 0;
}
运行结果:
$ make tt
cc tt.c -o tt
$ ./tt
b - a is 12
addr of b is 7ffffeaab31c
addr of a is 7ffffeaab2b8
----------------------------------------
---file t.c--- 机器和OS都是64位的
#include <stdio.h>
typedef struct student {
char c;
long a;
int b;
}stu;
int main(int argc, char** argv)
{
int *a;
int b = 0;
a = &b;
printf("sizeof(stu) is %d \n", sizeof(stu));
printf("The addr of a is %lx\n", a);
printf("The addr of (stu* )a - 1 is %lx \n", (stu* )a - 1);
printf("The addr of (stu* )(a - 1) is %lx \n", (stu* )(a - 1));
return 0;
}
运行结果:
$ make t
cc t.c -o t
$ ./t
sizeof(stu) is 24
The addr of a is 7fffc9270194
The addr of (stu* )a - 1 is 7fffc927017c
The addr of (stu* )(a - 1) is 7fffc9270190
分析:
在结构体中是按最长的类型对齐的,即在struct student中是按long型对齐的,即结构体为24字节。