Переписать программу для работы с двумерным массивом - C (СИ)
Формулировка задачи:
/*КАК СДЕЛАТЬ ЭТО С ДВУХМЕРНЫМ МАССИВОМ???*/
///REALLOC : ОДНОМЕРНЫЙ
#include<iostream>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
using namespace std;
int main(int argc, char** argv)
{
int i,j=0;
int *BMP=NULL;
int m=3;
int n=3;
int k=0;
while(1)
{
BMP=(int*)realloc(BMP,n*sizeof(int));
////////////////////////////////////////////////////////////////////
for (i=0+k;i<n;i++)
{
printf("BMP[%d] = ... ",i);
scanf("%d",&BMP[i]);
}
printf("\n");
for (i=0;i<n;i++)
{
printf("BMP[%d] => %d \n",i,BMP[i]);
}
printf("\n\n");
k=n;
n+=3;
////////////////////////////////////////////////////////////////////
}
return 0;
}Решение задачи: «Переписать программу для работы с двумерным массивом»
textual
Листинг программы
int **a;//это будет массив массивов (точнее, массив ссылок)
a = (int **)malloc(10*4);//создём 10 элементов по 4 байта каждый. Честно говоря, не знаю как лучше это написать. Для 64-битных систем будет, скорее всего, 10*8
for (i = 0; i < 10; i++)
a[i] = (int *)malloc(10*sizeof(int));//к каждому элементу a[i] прицепляем массив из 10 элементов целого типа.
for (i = 0; i < 10; i++)
for (j = 0; j < 10; j++){
a[i][j] = rand() % 20;
printf("%i ", a[i][j]);
};
Объяснение кода листинга программы
- Объявляется двумерный массив a типа int **, то есть это массив указателей на массивы int.
- С помощью malloc(104) выделяется память под 10 элементов по 4 байта каждый. При этом, если система 64-битная, то скорее всего будет использоваться 108.
- В цикле for с помощью malloc(10*sizeof(int)) к каждому элементу a[i] прицепляется массив из 10 элементов целого типа.
- В цикле for двойной вложенности в каждой итерации заполняется массив a[i][j] случайным числом от 0 до 19 и выводится на экран с помощью printf(
%i, a[i][j]);.