Резюме
При изучении указателей возникло лишь сомнение: можно ли поменять две матрицы с помощью функции, не меняя элемент в элементе?
Я создал 2 матрицы динамически, используя malloc, и объявил значения его элементов в main ().Итак, я мог бы поменяться следующим образом:
(Обмен элементов по элементам)
void swapMatrix(int** a, int** b){
for(int i = 0; i< row; i++){
for(int j = 0; j< col; j++){
int tmp = a[i][j];
a[i][j] = b[i][j];
b[i][j] = tmp;
}
}
}
...
int main() {
...
print(M1);
swapMatrix(M1, M2);
print(M1);
...
(Обмен строк за строкой)
void swapMatrix(int** a, int** b){
int* tmp = *a;
*a = *b;
*b = tmp;
for (int i = 0; i<col; i++){
int* tmp = *(a+i);
*(a+i) = *(b+i);
*(b+i) = tmp;
}
}
...
int main() {
...
print(M1);
swapMatrix(M1, M2);
print(M1);
...
Попытки
Но есть ли способ просто изменить указатель матрицы на адрес указателя?Я попытался следующие коды:
I)
void swapMatrix(int** a, int** b){
int** tmp = a;
a = b;
b = tmp;
}
...
int main() {
...
print(M1);
swapMatrix(M1, M2);
print(M1);
...
Он скомпилирован, но когда я проверил его элементы, ни один из них действительно не поменялся местами
II)
void swapMatrix(int*** a, int*** b){
int*** tmp = a;
a = b;
b = tmp;
...
int main() {
...
print(M1);
swapMatrix(&M1, &M2);
print(M1);
...
Опять же, он скомпилирован, но когда я проверил его элементы, ни один из них действительно не поменялся местами.
Как мне реализовать функцию, чтобыпоменять всю матрицу просто поменяв указатель на адрес указателя?Является ли это возможным?На самом деле, я не очень понимаю, почему попытка не сработала.Буду очень признателен, если вы сможете объяснить детали.