2010-03-31 50 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