Поиск транспонирования матрицы с помощью указателя (что не так с моим кодом?) - PullRequest
0 голосов
/ 06 ноября 2018

Можете ли вы просто сказать мне, что не так с моей логикой в ​​приведенном ниже коде? Я пытаюсь сделать транспонирование матрицы, но вывод идет дико неправильно. Например, я запускаю матрицу в своей основной функции:

int a[2][2]; 
a[0][0]=1;
a[0][1]=2; 
a[1][0]=3; 
a[1][1]=4; 
int *a1;

a1=&a[0][0];

и затем

transpose(a1,2,2); 

Вывод дает: [16 , 16], [3 , 16]. Но результат должен был быть [1 , 3], [2 , 4].

int* transpose(int *a,int m,int n)
{
    int i,j;
    int tmp;
    for(i=0;i<m;i++)
    {
            for(j=0;j<n;j++)
            {
                    *(a + i*m + j) = tmp;
                    *(a + i*m + j) = *(a + i + j*m);
                    *(a + i + j*m) = tmp;
            }
    }
    return a;
}

1 Ответ

0 голосов
/ 06 ноября 2018

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

tmp = *(a + i*m + j);
*(a + i*m + j) = *(a + i + j*m);
*(a + i + j*m) = tmp;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...