Выделить память под двумерный массив - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Есть програмка, нужно сделать что-бы массив mass был двумерный размером 7х4. Malloc должен работать.
#include <stdio.h> /*malloc*/
#include <conio.h>
#include <stdlib.h>
 
int main(void)
{
        float mass;
        int count = 0; 
        int A,C,i,j,**q2,m;
        int **q,k;
        
while(printf("\nplease enter num of elements for mass \n") && scanf("%d", &m))
 {
  q=(int*)malloc(m*sizeof(int*));
  printf("Adress of mass=%p\n", q);
  if(q==NULL){puts("no memory \n"); exit(1);}
  
  printf("enter A: ");
  scanf("%d", &A);
  printf("enter C: ");
  scanf("%d", &C);
        
       {for(i = 0; i<m; i++)
             {                                                
              mass = rand()%100;
              q2=malloc(mass*sizeof(int*));                      
              printf("%f ****** Adress of elemt: %p\n", mass, q2);
              if((mass>A)&(mass<C))
                         
              count++;  
             }

       }  
        printf("\n\namount elements:%d", count);
  }

 _getch();
 return 0;
}

Решение задачи: «Выделить память под двумерный массив»

textual
Листинг программы
#include <stdio.h>  /*malloc*/
#include <stdlib.h>
 
int main(void)
{
     int **mass, rows, columns;
     int count = 0;
     int min,max,i,j;
 
     printf("\nplease enter rows \n");
     scanf("%d", &rows);
 
     if ( ( mass = (int**)malloc(sizeof(int*) * rows) ) == NULL )
     {
        perror("malloc");
        exit(1);
     }
     printf("       Adress of mass=%p\n", mass);
 
     printf("\nplease enter columns \n");
     scanf("%d", &columns);
     for ( i = 0; i < rows; ++i )
     {
       if ( ( mass[i] = (int*)malloc(sizeof(int) * columns) ) == NULL )
       {
         perror("malloc");
         exit(1);
       }
       printf("       Adress of mass[%d]=%p\n", i, &mass[i]);
     }
 
     printf("enter min: ");
     scanf("%d", &min);
     printf("enter max: ");
     scanf("%d", &max);
     printf("<br>\n");
     printf("| Element  |  Number |  Adress  |\n");
     printf("=================================\n");
     for ( i = 0; i < rows; ++i )
     {
       for ( j = 0; j < columns; ++j )
       {
         mass[i][j] = rand()%10;
         if(i > 0 && j == 0)
            printf("|===============================|\n");
         printf("|mass[%d][%d]|    %d    | %p |\n",i, j, mass[i][j], &mass[i][j]);
         printf("|===============================|\n");
         if((mass[i][j] > min) && (mass[i][j] < max))
            count++;
       }
       printf("\n");
     }
 
     printf("\n\namount elements:%d\n", count);
     for ( i = 0; i < rows; ++i )
         free(mass[i]);
 
     free(mass);
 //_getch();
     return 0;
}

Объяснение кода листинга программы

  1. Объявлены переменные:
    • int **mass - двумерный массив (указатель на указатель на int);
    • int rows - количество строк;
    • int columns - количество столбцов;
    • int count - счетчик элементов, удовлетворяющих условию;
    • int min, max - минимальное и максимальное значение для элементов массива;
    • int i, j - индексы для обхода массива;
    • char *mass[], **mass[] - указатели на память под массив.
  2. Пользователю предлагается ввести количество строк.
  3. Выделена память под массив указателей на int с помощью функции malloc(). Если память не может быть выделена, программа завершается.
  4. Пользователю предлагается ввести количество столбцов.
  5. В цикле выделена память под каждый из подмассивов с помощью функции malloc(). Если память не может быть выделена, программа завершается.
  6. В цикле от 0 до (rows-1) заполняются элементы массива случайными числами от 0 до 9 с помощью функции rand().
  7. В цикле от 0 до (columns-1) выводятся на экран элементы массива, их номера и адреса в памяти.
  8. Если элемент больше min и меньше max, к переменной count прибавляется единица.
  9. По завершении работы с массивом, память освобождается с помощью функции free().

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.286 из 5
Похожие ответы