Как с помощью указателей заменить две конкретные строчки в двумерном динамическом массиве? - 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, что означает успешное завершение работы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д