2010-03-31 88 views
0

有没有办法找出指针在数组中的位置?数组指针算术问题

可以说,我们已经做到了这一点:

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

对不起,按照目前的措辞,这没有意义的我。 – 2010-03-31 17:06:04

+0

轻微重写。 – Konrad 2010-03-31 17:08:45

+3

int * pInt = nNums [4];'需要'int * pInt =&nNums [4];'。 – 2010-03-31 17:13:13

回答

17

是:

ptrdiff_t index = pInt - nNums; 

当指针数组元素相减,它是相同的减去下标。

类型ptrdiff_t定义在<stddef.h>(在C++中它应该是std::ptrdiff_t<cstddef>应该被使用)。

+0

很好的答案,谢谢。没有意识到这是如此简单:-) – Konrad 2010-03-31 17:23:32

1

是的。你拿的值:

pInt - nNums 
1
ptrdiff_t delta = pInt - nNums; 
1

如果我理解你的问题(这不是太清楚)

然后

int offset=pInt-nNums; 

会给你从一开始走多远nNum pIint是。如果

int* pInt=nNum[4]; 

你的真正用意

int* pInt=nNums+4; 

然后在

int offset=pInt-nNums 

偏移将是4,所以你可以做

int value=nNums[offset] 

这将是相同的

int value=*pInt 
1
pInt - nNums 

此外,

int* pInt = nNums[4]可能不是你想要的。它指向的内存,地址,该地址将是nNums[4]

将其更改为

int* pInt = &nNums[4]; 
+3

嗯,不是最后一行。您将nNums [4]中的值分配给未初始化的变量。 – KTC 2010-03-31 17:13:12

+0

@KTC我为他解决了这个问题 – JonH 2010-03-31 17:20:54

+0

@JonH,现在nNums [4](int *类型)的地址被分配给一个解引用的指针(int类型)。类型不匹配.... – KTC 2010-03-31 17:25:56