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
----------------解决方案--------------------------------------------------------