2012-02-22 72 views
3

試圖理解處理數組時的指針算術。在我看來,它們用於快速訪問數組,但也許我完全錯了。我的意思是,如果我們有這個:指針算法

*(myArray + 1),我們要去我認爲在陣列中的下一個位置。

我正在將一些C++轉換爲C#,並且C++有指針算術。我需要C#完全管理,以便弄清楚如何將指針轉換爲C#。

謝謝你的任何想法。

大衛

回答

2

如果你對指針不太熟悉,那麼在C#中你的生活將會更容易一些。首先,你的代碼貼:

`*(myArray + 1)` 

你的理解是基本正確,你解引用在myArray的第1個要素。換句話說,訪問myArray[1]

轉到C#,您可能會使用通用的List<T>,其中T是您的myArray的類型。您可以使用類似的語法 - myArray[i],以及List上的更多功能。

+0

感謝您的信息。如果myArray [1]是首選,並且我知道指針算術在某種程度上是有用的,那麼它在數組的上下文中真的很有用嗎? – 2012-02-22 17:17:24

+1

@DavidWhitten - 每個人對此都有看法。看看[這是關於指針算術與索引的討論](http://stackoverflow.com/q/693139/704402)的一些想法。在一天結束時,傾向於可讀代碼。一堆堆指針算術可能確實看起來很棒,但是你不會對下一個人有任何好處。特別是如果下一個人是你。 – 2012-02-22 18:28:32

2

*(myArray + 1)是完全等同於myArray[1]。你應該總是喜歡後者。閱讀起來更容易,性能也沒有差別。

2

也許這將幫助:http://www.cplusplus.com/doc/tutorial/pointers/

而*(myarray的+1)等於myArray的[1]。

+0

該網站對指針和數組之間關係的描述非常不準確。它得到的代碼是正確的,但數組描述爲「常量指針」*是完全錯誤的。 – 2012-02-22 16:45:03

2

假設myArray指向一個數組的起始位置(任何名稱都應該),*(myArray + 1)myArray[1]是相同的,而後者是可讀性的首選。

轉換指針算術代碼的技巧部分是當您使用指向數組的某個隨機部分的指針時 - *(current + 1)其中current是指向數組中的任意元素的指針。在這裏,你必須找出原始數組和current指向的元素數組中的索引。假設它是myArrayi,則上面的代碼轉換爲myArray[i+1]