Как назначить 1-е измерение двумерного массива указателю - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть двумерный массив, и я пытаюсь назначить первое измерение этого двумерного массива указателю, как показано ниже, но это не работает.

fixed (byte* fixedInput = array2D[0])

Как можно Я присваиваю только первое измерение, как я пытаюсь сделать, чтобы fixedInput?

fixedInput было бы тогда массивом 1-мерных указателей со всей информацией из 1-го измерения array2D

Спасибо!

    unsafe static void testFunction()
    {
        byte[,] array2D = new byte[10, 100];

        fixed (byte* fixedInput = array2D[0])
        {
        }
    }

1 Ответ

0 голосов
/ 23 апреля 2020

Вы не можете. Это указатель на память. Данные двумерного массива упорядочены таким образом, что последнее измерение находится в последовательности, в точках расположения, расположенных позади друг друга.

Когда вы получаете указатель, вы следите за памятью так, как она заполнена.

Если вы хотите читать данные по другому измерению, вам нужно будет шаг за шагом, пропуская каждую строку.

public unsafe static void testFunction()
{
    uint[,] array2D = new uint[10, 100];
    for(int x=0;x<100;x++)
    {
        for(int y=0;y<10;y++)
            array2D[y,x] = (uint)(1000u*y+x);
    }

    // read some data along first dimension.
    fixed (uint* fixedInput = &array2D[1,90])
    {
        for(int j=0;j<5;j++)
            System.Console.WriteLine(string.Format("{0}",fixedInput[j*100]));
}

Данные из массива выборок располагаются в памяти таким образом:

0   1   2   3   4 [...] 99  1000  1001  1002 [...]
...