6.1.1 Динамическое распределение для матрицы целых
чисел
Функция распределения памяти и
установки начальных значений для целой матрицы
-
int
**AllocIntMatrix( int m, int n)
{
int
**mas;
int
i,j;
mas=(int
**)malloc(sizeof(mas)*m); //выделение памяти под вектор указателей размерностью m
if
(mas==NULL) return NULL;
for
(i=0; i<m; i++) //выделение памяти под строку
целых чисел
{
mas [i]=( int *)malloc(sizeof( int)*n); //выделяем память
под вектор целых чисел размерностью n
if (mas[i]==NULL) return NULL;
//начальная инициализация матрицы целых
чисел
for (j=0; j<n; j++) //все
элементы устанавливаем в единицу
mas [i][j]=1;
}
return
mas;
}
Функция удаления памяти, занимаемой
матрицей
-
void DeleteIntMatrix(int **matr, int m)
{
int
i;
for
(i=0; i<m; i++) free (matr[i]); //освободить
память, выделенную под строки
free (matr); //освободить память, выделенную под массив указателей
}
Тестовый пример использования
целых матриц
- void main()
{
int
i,j,k;
int
**imatr1=AllocIntMatrix(2,3); //распределить память
под первую матрицу
int
**imatr2=AllocIntMatrix(3,2); //распределить память
под вторую матрицу
int
**res=AllocIntMatrix(2,2); //распределить память под
результирующую
for(k=0; k<2; k++) //вычислить произведение двух матриц
for(i=0; i<2; i++)
{
res[k][i]=0;
for(j=0; j<3; j++)
res[k][i]+=imatr2[j][i]*imatr1[i][j];
}
for(i=0; i<2; i++) //вывести результат
{
for(j=0; j<2; j++)
printf("%d ",res[i][j]);
printf( "\n");
}
//освободить
память
DeleteIntMatrix(imatr1,2);
DeleteIntMatrix(imatr2,3);
DeleteIntMatrix(res,2);
getch();
}