Можете ли вы понять смысл этого кода указателя C? - PullRequest
0 голосов
/ 01 декабря 2010

У меня есть этот фрагмент кода 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 ]

4 голосов
/ 01 декабря 2010

Вы действительно не пишете что-то эквивалентное в C #, потому что у вас там нет указателей (за исключением вызова unsafe кода) - чтобы получить элемент из массива C #, вам нужен массив ref и индекс, Вы индексируете в массив.

Конечно, вы можете сделать то же самое с массивом Си. Мы преобразуем арифметику указателя 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 #.

2 голосов
/ 01 декабря 2010

&H[9*i] == (H + 9*i), таким образом, вы можете заменить использование h[x] на H[9*i+x]. Остальное должно быть простым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...