两个不同类型的指针相减,肯定会统一类型,那么是统一成 int * - int *,还是 AdvTeacher * - AdvTeacher * ?
试一试不就知道了^_^
offset = (int)( (AdvTeacher *)&(p->age) - p );
offset = (int)( &(p->age) - (int *)p );
经过测试是offset = (int)( &(p->age) - (int *)p );
也就是 int * - int *
推到这里,我已经明白了为什么使用sar指令了,你明白了吗?
最后,给出一段代码
#include<stdio.h>
int main(void)
{
int arr[3] = {1, 2, 3};
int *p1 = &arr[0];
int *p2 = &arr[1];
int offset4 = p2 - p1;
return 0;
}
int offset4 = p2 - p1;
0139171B 8B 45 D4 mov eax,dword ptr [p2]
0139171E 2B 45 E0 sub eax,dword ptr [p1]
01391721 C1 F8 02 sar eax,2
01391724 89 45 C8 mov dword ptr [offset4],eax
|