你的p和q都是指针型的,它俩的值都是地址,你把他们强制转换成int型,系统会自动进行切片,然后当作int型的进行计算。一般来说,前面那部分切断对它们的相对大小没有影响,所以最终因为相差8个字节而结果为8.
补充一下,q=p+1,因为他们是指向double的指针,所以编译后的跨度自动为8个字节,而<<是进行过重载的,能够正确输出指针间的相对差,所以输出的为 1(1个跨度,8个字节),而对int型来说,字面上相差多少,当然也就结果是多少了。
(int)q把指针类型转换成整型,q原来保存的是dArray[1]的地址,p保存dArray[0]的地址,转换成整型之后相减的结果就是两个指针之间的字节数,double占据8个字节,输出的结果就是8了。
q是p向后移1个实数64位
地址是字节为单位
所以是64/8=8啊
这涉及到内存模型!简单的回答就是:
p与q都有8个字节,由于q = p + 1;所以p的下一个地址数(由于p有8个字节,所以在内存单位中p+8=q)就是q,
(int)q - (int)p这句中,把double强制类型转换为int(4个字节),也就是p与q的后四个字节舍去(他们有8字节),尽管舍去了后面的4个字节,但p与q他们的物理地址并没有变,所以依旧满足p+8=q
所以 你懂得!画个内存图就明白了!