有没有办法弄清楚指针在数组中的位置?
让我们说我们已经这样做了:
int nNums[10] = {'11','51','23', ... }; // Some random sequence
int* pInt = &nNums[4]; // Some index in the sequence.
...
pInt++; // Assuming we have lost track of the index by this stage.
...
有没有办法确定数组pInt
中的哪个元素索引是'指向'而没有再次遍历数组?
答案 0 :(得分:17)
是:
ptrdiff_t index = pInt - nNums;
当减去指向数组元素的指针时,它与减去下标相同。
类型ptrdiff_t
在<stddef.h>
中定义(在C ++中应该std::ptrdiff_t
并且应该使用<cstddef>
。
答案 1 :(得分:1)
呀。你取值:
pInt - nNums
答案 2 :(得分:1)
ptrdiff_t delta = pInt - nNums;
答案 3 :(得分:1)
如果我理解你的问题(这不太清楚)
然后
int offset=pInt-nNums;
会告诉你nNums pIint的开头有多远。如果通过
int* pInt=nNum[4];
你的意思是
int* pInt=nNums+4;
然后在
int offset=pInt-nNums
偏移量为4,所以你可以做
int value=nNums[offset]
与
相同int value=*pInt
答案 4 :(得分:1)
pInt - nNums
此外,
int* pInt = nNums[4]
可能不是你想要的。它将指向内存,其地址为nNums[4]
将其更改为
int* pInt = &nNums[4];