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