Преобразование из зубчатого массива для удвоения указателя в C#

Вы можете попробовать это (отказ от ответственности, я сам не проверял). Также прочитайте это . вот откуда пришла ссылка.

14
задан Noldorin 20 May 2009 в 20:45
поделиться

2 ответа

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
    }
}

Я не могу не задаться вопросом, для чего это и если есть лучшее решение, чем использование двойного указателя.

4
ответ дан 1 December 2019 в 16:39
поделиться

На данный момент я выбрал решение 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;
    }
}
-6
ответ дан 1 December 2019 в 16:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: