你能理解这个C指针代码吗?

时间:2010-12-01 11:19:15

标签: c# c arrays visual-c++ pointers

我有一段C代码,它以非常令人困惑的方式使用指针。

   // We first point to a specific location within an array..
   double* h = &H[9*i];
   int line1 = 2*n*i;
   int line2 = line1+6;

   // ..and then access elements using that pointer, somehow..
   V[line1+0]=h[0]*h[1];
   V[line1+1]=h[0]*h[4] + h[3]*h[1];

这里发生了什么?如何在C#中编写等效的东西?

2 个答案:

答案 0 :(得分:4)

你真的没有在C#中写出等价的东西,因为你没有指针(除了通过调用unsafe代码) - 要从C#数组中获取元素,你需要一个数组引用和一个索引,并将索引编入数组。

当然,你可以对C数组做同样的事情。我们将C指针算术转换为C数组索引:

int h_index = 9 * i;
int line1 = 2 * n * i;
int line2 = line1 + 6;

V[line1 + 0] = H[h_index] * H[h_index + 1];
V[line1 + 1] = H[h_index] * H[h_index + 4] + H[h_index + 3] * H[h_index + 1];

然后我们有一些可以在C#中逐字逐句使用的东西。

答案 1 :(得分:2)

&H[9*i] == (H + 9*i),因此您可以将h[x]的使用替换为H[9*i+x]。其余的应该是直截了当的。