Вы можете попробовать это (отказ от ответственности, я сам не проверял). Также прочитайте это . вот откуда пришла ссылка.
A double [] [] - это массив double [], а не double *, поэтому, чтобы получить double **, нам сначала понадобится double * []
double[][] array = //whatever
//initialize as necessary
fixed (double* junk = &array[0][0]){
double*[] arrayofptr = new double*[array.Length];
for (int i = 0; i < array.Length; i++)
fixed (double* ptr = &array[i][0])
{
arrayofptr[i] = ptr;
}
fixed (double** ptrptr = &arrayofptr[0])
{
//whatever
}
}
Я не могу не задаться вопросом, для чего это и если есть лучшее решение, чем использование двойного указателя.
На данный момент я выбрал решение zachrrs (именно это, как я подозревал, нужно было сделать в первую очередь). Вот метод расширения:
public static double** ToPointer(this double[][] array)
{
fixed (double* arrayPtr = array[0])
{
double*[] ptrArray = new double*[array.Length];
for (int i = 0; i < array.Length; i++)
{
fixed (double* ptr = array[i])
ptrArray[i] = ptr;
}
fixed (double** ptr = ptrArray)
return ptr;
}
}