Я работаю над созданием более эффективной версии этого C-кода, используя арифметику указателя, но я застрял.Создание более эффективного преобразования матрицы в C
Это исходный код:
(я звоню тип массива Marray_t, внутр M)
void transpose(Marray_t A){
int i, j;
for(i=0; i<M; i++){
for(j=0; j<M; j++){
int t = A[i][j];
A[i][j] = A[j][i];
A[j][i] = t;
}
}
}
Без использования таНоса, я хочу, чтобы создать более эффективный способ сделать транспонировать на квадратной матрице размерности MxM.
Это то, что я пытался:
void transpose(Marray_t A, int M){
int i, j;
for (i=0; i<M; i++){
int *row = A[i];
for(j=0; j<M; j++){
int *col = &A[i][j];
int t1 = *(row+i);
int t2 = *(col + M*i)+(i*4);
*row = t2;
}
}
}
Если я запускаю мой код на матрицу 2х2, он не работает.
Если у меня есть матрица = {{2,3}, {4,5}}, моя транспозиция должна дать мне {{2,4}, {3,5}}, но я получаю {{3,2 }, {4,5}}
Я очень новичок в использовании указателей, поэтому любые советы/помощь будут высоко оценены. Спасибо.
Как это может работать, когда только элементы, которые вы меняете, находятся в первом столбце? – Beta
Почему вы предполагаете, что использование указателей сделает это более эффективным? –
Ваша первая версия ничего не делает - вы меняете (a, b) вперед (b, a), а затем снова назад от (b, a) до (a, b). – drahnr