Копирование элементов двумерного массива в одномерный - C (СИ)
Формулировка задачи:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int m,n,i,j;
printf("Vvedite razmer massiva");
scanf("%d",&n);
scanf("%d",&m);
int **a=(int**)malloc(sizeof(int**)*n);
for(i=0;i<n;i++)
{
a[i]=(int*)malloc(sizeof(int*)*m);
}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
a[i][j]=rand()%10;
printf(" %d",a[i][j]);
}printf("\n");
}
int *p;
p=(int *)malloc(sizeof(int *));
for(i=0;i<n;i++)
return 0;
}Решение задачи: «Копирование элементов двумерного массива в одномерный»
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
int main(void)
{
int** a = NULL;
int* b = NULL;
int i = 0;
int j = 0;
int cnt = 0;
int flag = 0;
const int N = 3;
const int M = 4;
srand(time(NULL));
a = malloc(M * sizeof(*a));
b = malloc(M * N * sizeof(*b));
if ((a != NULL) && (b != NULL))
{
i = 0;
cnt = 0;
flag = 1;
while ((i < M) && flag)
{
a[i] = malloc(N * sizeof(**a));
if (a[i] == NULL)
{
flag = 0;
}
cnt++;
i++;
}
if (!flag)
{
for(i = cnt - 1; i > -1; i--)
{
free(a[i]);
}
}
else
{
for(i = 0; i < M; i++)
{
for(j = 0; j < N; j++)
{
a[i][j] = rand() % 10;
printf("%2d ", a[i][j]);
}
printf("\n");
}
printf("\n");
for(i = 0; i < M; i++)
{
memcpy(&b[i * N], &a[i][0], N * sizeof(*b));
}
for(i = 0; i < (M * N); i++)
{
printf("%2d ", b[i]);
}
printf("\n");
for(i = 0; i < M; i++)
{
free(a[i]);
}
}
}
free(a);
free(b);
return 0;
}
Объяснение кода листинга программы
Код начинается с объявления двух указателей на двумерный массив (int* a) и одномерный массив (int b). Затем объявляются переменные для управления циклом: i, j, cnt и flag. Далее определяются константы N и M, которые представляют собой размеры массивов. Затем производится инициализация генератора случайных чисел. Следующий блок кода выделяет память под двумерный массив (a) и одномерный массив (b). Если память успешно выделена, то флаг устанавливается в 1. Если произошла ошибка выделения памяти, то флаг устанавливается в 0. Далее следует цикл, который заполняет двумерный массив случайными числами от 0 до 9. Затем происходит копирование элементов из двумерного массива в одномерный. После этого двумерный массив освобождается от выделенной под него памяти, а затем и одномерный массив. Код завершается возвратом 0, что означает успешное выполнение программы.