Динамическое размещение массивов
При динамическом распределении памяти для массивов следует описать соответствующий указатель и присваивать ему значение, например, при помощи функции calloc(). Одномерный массив a[10] из элементов типа float можно создать следующим образом :
float *a;
a=(float*)(calloc(10,sizeof(float));
Для создания двумерного массива вначале нужно распределить память для массива указателей на одномерные массивы, а затем распределять память для одномерных массивов. Пусть, например, требуется создать массив a[m][n], это можно сделать при помощи следующего фрагмента программы:
main ()
{
double **a;
int m,n,i;
scanf("%d %d",&m,&n);
a=(double **)calloc(m,sizeof(double *));
for (i=0; i<m; i++)
a[i]=(double *)calloc(n,sizeof(double));
. . . . . . . . . . . .
}
Аналогичным образом можно распределить память и для трехмерного массива размером m,n,l. Следует только помнить, что ненужную для дальнейшего выполнения программы память следует освобождать при помощи функции free().
main ()
{
long ***a;
int m,n,l,i,j;
scanf("%d %d %d",&m,&n,&l);
/* -------- распределение памяти -------- */
a=(long ***)calloc(m,sizeof(long **));
for (i=0; i<m; i++)
{ a[i]=(long **)calloc(n,sizeof(long *));
for (j=0; j<n; j++)
a[i][j]=(long *)calloc(l,sizeof(long));
}
. . . . . . . . . . . .
/* --------- освобождение памяти ----------*/
for (i=0; i<m; i++)
{
for (j=0; j<n; j++)
free (a[i][j]);
free (a[i]);
}
free (a);
}
При работе с динамической памятью в стиле С++ нужно использовать операторы new и delete для выделения и освобождения памяти соответственно.
Задание
Выполните задание по работе с двумерными массивами из лабораторной работы № 4 «Работа с массивами в языке программирования C», взяв в качестве номера варианта значение (30-NumInList), где NumInList – Ваш номер по списку, и используя динамическое создание массивов. Размер массива должен задаваться пользователем с клавиатуры. Результат работы программы должен выводиться на экран и в файл.
