当使用指向数组的指针时,我总是通过使用索引器(例如myPtr[i] = stuff)来访问元素。但是,我最近查看了 BitConverter 's implementation,发现通过访问*(myPtr + i) = stuff可以访问元素。

我认为这很奇怪,因为这两种方法(据我所知)都做完全相同的事情,也就是说,它们返回myPtr + i的地址,但(在我看来)索引器方法看起来更具可读性。

那么,Microsoft为什么选择以这种方式增加指针,这两种方法有什么区别(在性能上有好处)吗?

最佳答案

如您所说,他们做同样的事情。

实际上,当访问int*时,ptr[i]*(ptr + i)语法都将跳过边界检查,并且如果i大于数组长度,则指向数组边界之外的某些内存。

我很确定C#和C++都使用来自C的*(ptr + index)语法继承了对数组指针的索引访问。我很确定这是两种语法都可用的唯一原因。

10-04 11:04