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