Указатели чаще всего используются для работы с динамическими массивами памяти, которые представляют собой массивы переменной длины, память под которые может выделяться и изменяться в процессе выполнения программы, как при каждом новом запуске программы, так и в разных ее частях. Обращение к i-му элементу динамического массива x имеет вид x^[i].
При работе с динамическими переменными необходимо соблюдать следующий порядок работы:
1. описать указатели;
2. распределить память;
3. обработать динамический массив;
4. освободить память.
Понятие динамического массива можно распространить и на матрицы. Динамическая матрица представляет собой массив указателей, каждый из которых адресует одну строку (или столбец). Рассмотрим описание динамической матрицы. Пусть есть типы данных massiv и указатель на него din_massiv:
type massiv=array [1..1000] of real;
din_massiv=^massiv;
Динамическая матрица X будет представлять собой массив указателей:
var X: array[1..1000] of din_massiv;
Работать с матрицей необходимо следующим образом:
1. определить ее размеры (пусть N – число строк, M – число столбцов);
2. выделить память под матрицу: for i:=1 to N do
getmem(X[i], M*sizeof(real));
Каждый элемент статического массива X[i] – указатель на динамический массив, состоящий из M элементов типа real. В статическом массиве X находится N указателей.
3. для обращения к элементу динамической матрицы, расположенному в i-той строке и j-м столбце, следует использовать следующую конструкцию: X[i]^[j];
4. после завершения работы с матрицей необходимо освободить память:
for i:=1 to N do
freemem(X[i], M*sizeof(real));
2. Выполните следующие упражнения: