Как с помощью указателей заменить две конкретные строчки в двумерном динамическом массиве? - C (СИ)
Формулировка задачи:
подскажите пожалуйста как с помощью указателей заменить две конкретные строчки в двумерном динамическом массиве?
если можно с кодом
заранее спасибо
Решение задачи: «Как с помощью указателей заменить две конкретные строчки в двумерном динамическом массиве?»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define M 4
#define N 5
/* переставить две любые строки */
void swapRows(int *R1, int *R2)
{ int temp;
for(int j=0;j<N;j++)
{ temp = R1[j];
R1[j] = R2[j];
R2[j] = temp;
}
}
int main()
{ int i, j;
srand((unsigned int) time(NULL));
int **A = (int**) malloc(M * sizeof(int*));
for(i = 0; i<M;i++)
A[i] = (int*) malloc(N*sizeof(int));
printf("Initial array:\n");
for (i=0;i<M;i++)
{ for(j=0;j<N;j++)
{ A[i][j] = rand()%10-5;
printf("%4d", A[i][j]);
}
printf("\n");
}
/* переставляем строки 1 и 3 */
swapRows(A[1], A[3]);
printf("\n\nAfter swap:\n");
for (i=0;i<M;i++)
{ for(j=0;j<N;j++)
printf("%4d", A[i][j]);
printf("\n");
}
fflush(stdin);
getchar();
return 0;
}
Объяснение кода листинга программы
- В функции
swapRowsпроисходит перестановка двух строк в двумерном массиве. Функция принимает два указателя на начало строк, которые нужно поменять местами. - Внутри функции объявлен временный целочисленный переменный
temp, который будет использоваться для хранения значений, которые считываются из массива. - Затем в цикле
forпроходятся по всем элементам первой строки (которую нужно поменять) и копируются вtemp. - После этого, в том же цикле, значения из
tempзаписываются в массив второй строки, а значения из второй строки записываются вtemp. - В конце цикла, значения из
tempзаписываются обратно в первую строку. - В функции
mainпроисходит инициализация двумерного массива динамическим выделением памяти. - Затем массив выводится на экран.
- После этого, вызывается функция
swapRows, которая меняет местами вторую и третью строки массива. - После вызова функции
swapRows, массив выводится на экран еще раз. - В конце программы добавлен вызов
fflush(stdin), чтобы сгладить возможные проблемы с буфером ввода. - И вызов
getchar(), чтобы программа ждала нажатия любой клавиши перед завершением. - Программа возвращает 0, что означает успешное завершение работы.