|
发表于 2017-12-21 13:53:20
|
显示全部楼层
两个不同类型的指针相减,肯定会统一类型,那么是统一成 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
复制代码
|
|