指针算术

3
尝试理解处理数组时的指针算术。似乎它们是用于快速访问数组的,但也许我完全错了。我的意思是如果我们有这个:

*(myArray + 1),我认为我们将进入数组的下一个位置。

我正在将一些C++代码转换为C#,而C++中涉及到了指针算法。我需要C#完全受控,所以需要弄清如何将指针内容翻译成C#。

谢谢任何建议。

David

4个回答

2

*(myArray + 1) 等同于 myArray[1]。你应该始终选择后者,因为它更易读,并且在性能上没有区别。


2

该网站关于指针和数组之间关系的描述非常不准确。虽然代码是正确的,但将数组描述为“常量指针”是完全错误的。 - Benjamin Lindley

2
如果您对指针不是非常熟悉,在C#中将更加容易。首先,您发布的代码:
`*(myArray + 1)`

您的理解基本上是正确的,您正在取消引用myArray中的第一个元素。换句话说,访问myArray[1]

转到C#,您可能会使用通用的List<T>,其中T是您的myArray的类型。类似的语法可供您使用-myArray[i],以及List上的许多其他函数。


感谢提供信息。如果偏好使用myArray[1],而且我知道指针运算在某些情况下很有用,那么在数组上下文中使用它真的有用吗? - David Whitten
1
@DavidWhitten - 每个人都有自己的看法。查看这个关于指针算术和索引的SO讨论获取一些想法。最终,应该倾向于可读性强的代码。一堆混乱的指针算术可能看起来很棒,但你并没有为下一个人做任何好事。特别是如果那个下一个人就是你。 - Adam S

2
假设myArray指向数组的开头(根据其名称应该是这样),*(myArray + 1)myArray[1]是相同的,但后者更易读。
将指针算术代码转换的更棘手的部分是当您正在使用指针指向数组的某个随机部分-*(current + 1)其中current是指向数组中任意一个元素的指针。在这里,您必须找出原始数组及其内部元素的索引,以确定current指向的元素。假设它是myArrayi,则上面的代码可翻译为myArray[i+1]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接