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
相关产品推荐
相关产品推荐

