Выделение памяти для матрицы
Для выделения памяти под одномерный массив целых чисел нам потребовался указатель
на целые числа. Для матрицы надо выделить указатель на массив целых чисел, который объявляется как
int **A;
Но лучше всего сразу объявить новый тип данных - указатель на целое число. Новые типы объявляются директивой typedefвне всех процедур и функций (там же, где и глобальные переменные).
typedef int *pInt;
Этой строкой мы сказали компилятору, что любая переменная нового типа pIntпредставляет собой указатель на целое число или адрес массива целых чисел. К сожалению, место для матрицы не удается так же просто выделить в памяти, как мы делали это для одномерного массива.
Если написать просто
int M = 5, N = 7;
pInt *A;
A = new int[M][N]; // ошибочная строка
компилятор выдает множество ошибок. Связано это с тем, что ему требуется заранее знать длину одной строки, чтобы правильно расшифровать запись типа A[i][j]. Ниже рассмотрены три способа решения этой проблемы.
Известный размер строки
Если размер строки матрицы известен, а неизвестно только количество строк, можно по-
ступить так: ввести новый тип данных – строка матрицы. Когда количество строк станет известно, с помощью оператора newвыделяем массив таких данных.
typedef int row10[10]; // новы тип: массив из 10 элементов
Main()
{
Int N;
row10 *A; // указатель на массив (матрица)
printf ( "Введите число строк ");
scanf ( "%d", &N );
A = new row10[N]; // выделить память на N строк
A[0][1] = 25; // используем матрицу, как обычно
printf("%d", A[2][3]);
delete A; // освобождаем память
}
Дата добавления: 2015-10-05; просмотров: 1294;