You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数组中指针相减:应按索引相减还是地址相减?

指针相减结果的疑问
  • ptr1存储arr[0]的地址,ptr2存储arr[3]的地址
  • 疑问:(ptr2-ptr1)难道应该是(3*4 - 0*4)(地址直接相减)而非索引相减?答案难道不应该是第二个问题的结果吗?

解答

在C语言中,同类型指针相减的结果是两者之间的元素个数(索引差值),而非字节地址的直接差值,这是指针运算的既定规则:

  • 指针运算会自动适配指向类型的内存大小,比如float*类型指针,每个元素占4字节
  • ptr2 - ptr1的计算逻辑为:(ptr2的地址值 - ptr1的地址值) / sizeof(float)
  • 对应你的例子,地址差为3*4=12字节,除以sizeof(float)=4,最终结果为3,也就是索引的差值

如果需要获取字节层面的地址差值,需要将指针强制转换为char*类型后再相减:

(char*)ptr2 - (char*)ptr1 // 结果为12

内容的提问来源于stack exchange,提问作者Padmesh Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 20:32:02