本人需要把一段C++算法代码翻译成C#,但代码里出现了指针的指针,定义如下:
private double **a;这样的定义在C#中怎么表示呢?
二是它在实例化时又如下,在double后面跟一个*号,这是什么意思?a = new double* [n] //n代表一个常数
三是它在用法时,即可作为一维数组用,也可当二维数组用,我就更晕了,没见过指针还能这样用的?for (i = 0; i < n; i++)
{
   a[i] = new double[n + 1];//作为一维数组用
}a[i - 1][j - 1] = term1 - term2;//作为二维数组用
由于算法很长,可能没有把全部代码贴出来,但代码中真实是这样使用的,我就不明白这是什么意思?再加上本人C++不才,所以,有高手帮帮忙,万分感激!
如何在C#中定义C++的指针?万分感激呀!

解决方案 »

  1.   

    首先C++的算法没必要翻译成C#,C#完全可以调用C++的DLL,保留原汁原叶的算法,速度还快,经过考验的类库不容易出错。这是软件工程的重要原则。你翻牛劲翻译过来还难免不出bug,即使没有bug也还要经过新一轮的考验期。成本很高。其次C#如果要用指针,你可以查一查unsafe模式。
      

  2.   

    指针的指针, 归根到底还是指针,在C#中可以用Intptr表示。数组名其实就是这个数组的首地址,可以理解为一个指针,这个指针指向了数组的首个元素。a = new double* [n] //n代表一个常数 这里是个指针数组。就是这个数组里面的值都是个指针,弄懂了这里,其它的都好理解。
      

  3.   


                double[][] a = new double[n][];
                for (int i = 0; i < n; i++)
                {
                    a[i] = new double[n + 1];
                }
                a[i - 1][j - 1] = term1 - term2;