鱼C论坛

 找回密码
 立即注册
查看: 1398|回复: 1

[已解决]这题答案是不是错了

[复制链接]
发表于 2018-10-11 09:04:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

指针里放的是地址,地址 减   地址 ,不应该是  2*4 == 8 吗
最佳答案
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)如果两个同类型指针但不是指向同一个数组的,两个指针做减法的结果没有什么意义

349738778.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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)如果两个同类型指针但不是指向同一个数组的,两个指针做减法的结果没有什么意义

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-30 12:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表