返回信息流int* a=(int*)0x12345678;
int* b1=(int*)0x12345679;
int* b2=(int*)0x12345680;
int* b3=(int*)0x12345682;
int* b4=(int*)0x12345686;
cout<<b-a;
b分别是b1到b4,为什么输出结果是 0,1,2,3,3 ?
感觉应该是地址的unsigned long的数字相减,然后除以sizeof(int)吧。。。
这是一条镜像帖。来源:北邮人论坛 / cpp / #31747同步于 2009/11/21
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
[求助]指针运算问题
fly100
2009/11/21镜像同步9 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
【 在 fly100 的大作中提到: 】
: int* a=(int*)0x12345678;
: int* b1=(int*)0x12345679;
: int* b2=(int*)0x12345680;
: ...................
恩,就是你说的这个原因
你感觉对了
【 在 fly100 (快乐的羚羊) 的大作中提到: 】
: int* a=(int*)0x12345678;
: int* b1=(int*)0x12345679;
: int* b2=(int*)0x12345680;
: ...................
vc6.0下是运行结果0 2 2 3,而且的确是指针值相减除4,汇编代码如下
int* a111=(int*)0x12345678;
mov dword ptr [ebp-4Ch],12345678h
int* b1=(int*)0x12345679;
mov dword ptr [ebp-50h],12345679h
printf("%d\n", b1-a111);
mov ecx,dword ptr [ebp-50h]
sub ecx,dword ptr [ebp-4Ch]
sar ecx,2
push ecx
push offset string "%d\n" (0042d084)
call printf (004042d0)
add esp,8
【 在 fly100 的大作中提到: 】
: int* a=(int*)0x12345678;
: int* b1=(int*)0x12345679;
: int* b2=(int*)0x12345680;
: ...................
LZ不会把16进制当10进制了吧。。
恩
【 在 fly100 (快乐的羚羊) 的大作中提到: 】
: int* a=(int*)0x12345678;
: int* b1=(int*)0x12345679;
: int* b2=(int*)0x12345680;
: ...................
【 在 fly100 的大作中提到: 】
: int* a=(int*)0x12345678;
: int* b1=(int*)0x12345679;
: int* b2=(int*)0x12345680;
: ...................
gcc 4.3 这几个数不知道怎么转换的
movl $305419896, -20(%ebp) //a
movl $305419897, -24(%ebp) //b1
movl $305419904, -28(%ebp) //b2
movl $305419906, -32(%ebp) //b3
movl $305419910, -36(%ebp) //b4
movl -36(%ebp), %edx
movl -20(%ebp), %eax
movl %edx, %ecx
subl %eax, %ecx
movl %ecx, %eax
sarl $2, %eax
movl %eax, %ebx
movl -32(%ebp), %edx
movl -20(%ebp), %eax
movl %edx, %edi