大可爱 发表于 2018-10-11 09:04:27

这题答案是不是错了

本帖最后由 大可爱 于 2018-10-11 09:21 编辑

指针里放的是地址,地址 减   地址 ,不应该是2*4 == 8 吗

calton007 发表于 2018-10-11 10:26:17

指针存放的是地址,这一点没有错!
但两个指针之间做减法,不仅是数值相减,做完减法之后还需要除以一个调整的权重,调整权重为指针指向的数组元素类型求sizeof()

假设数组a的类型是type,s - p 的背后运算是这样的:
(1)计算地址的差:s 的值 - p的值,结果记为 temp
(2)除以调整权重:temp / sizeof(type),这才是最后 s - p结果
所以,如果两个指针向同一个数组,它们相减的结果就是两个指针之间的元素数目。

补充几点:
(1)指针可以加减数字(int),表示指针在数组中的位置移动
(2)不要问我两个指针能不能做加法,仔细想想指针的含义
(3)两个指针类型相同才能相减
(4)如果两个同类型指针但不是指向同一个数组的,两个指针做减法的结果没有什么意义

页: [1]
查看完整版本: 这题答案是不是错了