#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct _Teacher
{
char *name;//4
char buf[100];//100
int age;//4
}Teacher;
//单位是字节
int main()
{
int i = 0;
Teacher *p = NULL;
//p - 1;为什么可以编译通过
//p = p - 2;
//p = p + 2;
//p = p - p;
//(p->age);//逻辑计算在CPU中运算
//&(p->age);对变量取地址&属于cpu的计算,没有读写内存,所以不会崩溃
/*i = (int)(&(p->age));
printf("%d\n", i);*///为什么是104
i = (int)&(((Teacher *)0)->age);//这个就是求在结构体中间的地址
//[ 4个字节的整形 ]
//[ 100个字节的字符 ] i = 100+4;然后我取得地址开始
//[ 4个字节的指针 ]
//[100+4]刚好地址就是104开始然后在取4个字节作为操作内存
//就跟我们的彩虹一样,每一种颜色代表一种模具,都有一个大小,我们看起来都差不多
printf("%d\n", i);
system("pause");
return 0;
}
后面的各位可以根据自己定义的数据去查看一下是否是对应的偏移量。