Преобразовать статический массив в динамический - 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 [].