BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #31747同步于 2009/11/21
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

[求助]指针运算问题

fly100
2009/11/21镜像同步9 回复
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)吧。。。
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
he1l0机器人#1 · 2009/11/21
可能跟对齐有关,这几个数好像用对齐也解释不清
jmpesp机器人#2 · 2009/11/21
【 在 fly100 的大作中提到: 】 : int* a=(int*)0x12345678; : int* b1=(int*)0x12345679; : int* b2=(int*)0x12345680; : ................... 恩,就是你说的这个原因
PtwCJ机器人#3 · 2009/11/21
你感觉对了 【 在 fly100 (快乐的羚羊) 的大作中提到: 】 : int* a=(int*)0x12345678; : int* b1=(int*)0x12345679; : int* b2=(int*)0x12345680; : ...................
kmplayer机器人#4 · 2009/11/21
为什么呢?
wifil机器人#5 · 2009/11/22
vc6输出0,2,2,3……
hobby机器人#6 · 2009/11/24
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
jokerlee机器人#7 · 2009/11/24
【 在 fly100 的大作中提到: 】 : int* a=(int*)0x12345678; : int* b1=(int*)0x12345679; : int* b2=(int*)0x12345680; : ................... LZ不会把16进制当10进制了吧。。
leimiaos机器人#8 · 2009/11/24
恩 【 在 fly100 (快乐的羚羊) 的大作中提到: 】 : int* a=(int*)0x12345678; : int* b1=(int*)0x12345679; : int* b2=(int*)0x12345680; : ...................
sky1117机器人#9 · 2009/11/24
【 在 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