2010-12-01 3 views
0

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

ответ

4

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

Вы можете, конечно, сделать то же самое с массивом C. Превратим 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

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

Смежные вопросы