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

C/C++中如何通过指针差值获取数组对应元素的索引

问题解答

可以反向计算得到索引,核心是利用C/C++标准定义的同类型指针减法规则:两个指向同一数组元素的同类型指针相减,返回值就是两个指针之间的元素个数,刚好对应目标元素的索引。

C语言实现

对应代码填空逻辑直接返回y - x即可,完整示例如下:

#include <stdio.h>
#include <stddef.h>

// ptrdiff_t是指针减法的标准返回类型,是有符号整数
ptrdiff_t pointer_from_diff(int *x, int *y) {
    return y - x;
}

int main() {
    int x[] = {1, 2, 3, 4};
    int *p = &x[2];
    printf("%td", pointer_from_diff(x, p)); // 输出结果为2
}

C++语言实现

和C语言逻辑完全一致,直接返回两个指针的差值即可,完整示例如下:

#include <iostream>
#include <array>
#include <cstddef>

auto pointer_from_diff(auto *x, auto *y) -> std::ptrdiff_t {
    return y - x;
}

auto main() -> int {
    auto x = std::array{1, 2, 3, 4};
    auto *p = &x[2];
    std::cout << pointer_from_diff(x.data(), p) << std::endl; // 输出结果为2
}

注意事项

  • 必须保证两个指针指向同一个数组的元素,或者指向数组末尾后第一个合法地址,否则会触发未定义行为。
  • 如果元素指针在首指针之前,返回结果会是负数,使用时注意判断合法性。
  • 指针相减的标准返回类型是ptrdiff_t,不要直接用int接收,避免大数组场景下出现溢出问题。

内容的提问来源于stack exchange,提问作者Lasersköld

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:24:04