2012-02-22 52 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]