Преобразовать статический массив в динамический - C (СИ)
Формулировка задачи:
Доброго всем и всего, да и побольше!
Пытаюсь понять что такое динамические массивы в Си, и как их готовят. Но что то не могу найти толковой информации.
Теорию нашел, функции знаю, но как их применить - нет.
Видел примеры переделки статических массивов в динамический, но там просят переделать достаточно сложный код, и черт ногу сломит в том коде. Может кто то сказать, или полностью переделать в следующем коде статический массив в динамический? Чтобы наглядно посмотрел и понял отличия. А то чет как то башка не освобождает память занятую статическими массивами
Листинг программы
- // программа распечатывает на экране квадратную матрицу заданного пользоветелем размера
- #include <stdio.h>
- // ну тут есесна этого в дин. массиве быть не должно, можно заменить на рандомайзер
- int Mas[9][9]=
- {
- { 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
- { 0 , 2 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
- { 0 , 0 , 3 , 0 , 0 , 0 , 0 , 0 , 0 },
- { 0 , 0 , 0 , 4 , 0 , 0 , 0 , 0 , 0 },
- { 0 , 0 , 0 , 0 , 5 , 0 , 0 , 0 , 0 },
- { 0 , 0 , 0 , 0 , 0 , 6 , 0 , 0 , 0 },
- { 0 , 0 , 0 , 0 , 0 , 0 , 7 , 0 , 0 },
- { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 8 , 0 },
- { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 9 }
- };
- int main(void)
- {
- int i, j, n;
- printf("Enter the size of square matrix (not more then 9): ");
- scanf("%d", &n);
- // вывод на экран квадратной матрицы заданного размера (размер вводится пользователем выше)
- for (i=0; i<n; i++)
- {
- for (j=0; j<n; j++)
- {
- printf("%2d", Mas[i][j]);
- }
- printf("\n");
- }
- system("pause");
- }
Решение задачи: «Преобразовать статический массив в динамический»
textual
Листинг программы
- int size;
- cout << "Enter size of array"; //размер массива
- cin >> size;
- int **Mas=new int *[size]; //указатели на строки
- for(int i=0;i<size;i++)
- Mas[i]=new int[size]; //формирование строк
- for (int i=0; i<size; i++)
- for (int j=0; j<size; j++)
- Mas[i][j]=rand(); //рандомное заполнение массива
- //действия с массивом
- for (int i = 0; i < size; i++) //освобождение памяти
- {
- delete []Mas[i];
- }
- delete []Mas;
Объяснение кода листинга программы
- Программа запрашивает у пользователя размер массива и сохраняет его в переменную
size
. - Программа выделяет память под массив указателей на int, используя оператор new, и сохраняет его в переменную
Mas
. - Затем программа, используя цикл for, выделяет память под каждый элемент массива, используя оператор new, и сохраняет его в соответствующий элемент массива
Mas
. - Далее программа заполняет массив случайными числами, используя два вложенных цикла for и оператор rand().
- После выполнения всех операций с массивом, программа освобождает память, используя два вложенных цикла for и функцию delete [].
- Наконец, программа освобождает память под массив указателей на int, используя функцию delete [].
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д