c语言int(*)p,int * p = (int*)1000;

int 16位下占2个字节,32位下占4个字节

地址1000到地址2000差1000个字节

1000个字节 32位下 是250个int型数据

指针相减 的值不是他们之间差多少个 字节 而是他们之间差多少个指针所指向的int型数据

p-q 差250个int数据..值-250

----------------解决方案--------------------------------------------------------

以下是引用我为C痴在2007-9-2 12:38:09的发言:

那编译的结果为什么会是-250呢??

由于地址1000到地址2000是以字节来进行计算的,即地址1000加上1000个字节就是地址2000

用(int *)强制转换两地址并求差以后,也就是求出地址1000和地址2000之间的以int数据类型为标识的数据个数。

p - q实际可以化为 ((int)p - (int)q) / sizeof(int)

16位的编译器通常int的长度为2个字节,而32位的编译器int为4个字节。

即p - q有两个答案,一个是-500,一个是-250

----------------解决方案--------------------------------------------------------

同意啊~~~~  呵呵

----------------解决方案--------------------------------------------------------

好的,,弄清楚了  谢谢大家!!

----------------解决方案--------------------------------------------------------

这里的减是指针之间的减,而指针之间的减是必须以指针的类型(类型所占的字节数)来计算的!~

由于整型的字节数是4,而p-q=-1000

-1000/4=-250;

结果便出来了!~ ^_^

----------------解决方案--------------------------------------------------------

晓得了 谢谢拉

----------------解决方案--------------------------------------------------------

是地址中的随机数吗!

多运行两次就明白了

----------------解决方案--------------------------------------------------------

编译出的结果,p是1000,q是2000,但p-q却成-250了,q-p是250~

搞不懂怎么回事了!

----------------解决方案--------------------------------------------------------

我运行的结果是-500

----------------解决方案--------------------------------------------------------

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值