数组指针算术问题

时间:2010-03-31 17:04:18

标签: c++ c arrays

有没有办法弄清楚指针在数组中的位置?

让我们说我们已经这样做了:

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中的哪个元素索引是'指向'而没有再次遍历数组?

5 个答案:

答案 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];