当使用指向数组的指针时,我总是通过使用索引器(例如myPtr[i] = stuff
)来访问元素。但是,我最近查看了 BitConverter
's implementation,发现通过访问*(myPtr + i) = stuff
可以访问元素。
我认为这很奇怪,因为这两种方法(据我所知)都做完全相同的事情,也就是说,它们返回myPtr + i
的地址,但(在我看来)索引器方法看起来更具可读性。
那么,Microsoft为什么选择以这种方式增加指针,这两种方法有什么区别(在性能上有好处)吗?
最佳答案
如您所说,他们做同样的事情。
实际上,当访问int*
时,ptr[i]
和*(ptr + i)
语法都将跳过边界检查,并且如果i
大于数组长度,则指向数组边界之外的某些内存。
我很确定C#和C++都使用来自C的*(ptr + index)
语法继承了对数组指针的索引访问。我很确定这是两种语法都可用的唯一原因。