"Указатели и динамические массивы".

Download Report

Transcript "Указатели и динамические массивы".

Delphi. Тема 5.
Указатели и
динамические массивы
План темы:
 1. Статическое и динамическое
распределение оперативной памяти.
 2. Понятие указателя.
 3. Организация динамических
массивов.
 4. Примеры задач с использованием
динамических массивов.
1. Статическое и динамическое
распределение оперативной памяти.
Все данные программы во время ее
выполнения размещаются в оперативной
памяти.
 При этом часть данных размещается в
памяти еще на этапе компиляции и в
процессе работы программы их адреса
относительно начала программы не
изменяются. Такое размещение данных
называется статическим и
соответствующие этим данным переменные
называются статическими переменными.

1. Статическое и динамическое
распределение оперативной памяти.

В языке Паскаль возможна также
организация динамического размещения
данных, при котором под некоторые данные
память выделяется непосредственно во
время выполнения по мере надобности, а
после решения требуемой задачи память
освобождается для других данных.
Соответствующие таким данным
переменные называются динамическими
переменными.
2. Понятие указателя.
 Для
организации динамического
распределения памяти используются
переменные специального типа –
указатели, которые обеспечивают
работу непосредственно с адресами
ячеек памяти.
 Значением указателя является адрес
памяти, где хранятся некоторые
данные.
2. Понятие указателя.
 Определение и использование
указателей:
var n : ^integer; //определение указателя
New(n); //выделение памяти
n^:=25; //использование указателя
n:=nil; //освобождение памяти
3. Организация динамических
массивов.
 Обычно динамическое выделение и
освобождение памяти используется
при работе с массивами данных.
 Преимущества динамических массивов
над статическими:
- Экономное использование памяти;
- Возможность изменять размер
массива во время работы программы.
Схема работы с динамическими
массивами:
//определение:
var A : array of Integer; //одномерный
B : array of array of real; //двумерный
n, m, i : Integer;
//выделение памяти:
SetLength(A, n);
SetLength(B, n);
For i:=0 to n-1 do SetLength(B[i], m);
Схема работы с динамическими
массивами:
//использование:
A[i] := A[i] + B[i, j]; //как и обычные массивы
SetLength(A, n+1); //изменение размера
//освобождение памяти:
A := nil;
B := nil;
3. Организация динамических
массивов.
 Нумерация элементов в динамическом
массиве начинается с 0.
 Процедуру SetLength() в процессе
выполнения программы можно
вызывать произвольное количество
раз. Каждый вызов приводит к
изменению длины массива, причем
содержимое массива сохраняется.
3. Организация динамических
массивов.
 Для работы с динамическими
массивами можно использовать
следующие функции:
High(A) – возвращает наибольшее
значение номера (индекса) в
динамическом массиве.
Copy(A, n, m) – возвращает часть
динамического массива A от элемента с
номером n до элемента с номером m.
4. Примеры задач с использованием
динамических массивов.
 Пример 5-1. Составить программу
формирования динамического массива
А из N случайных чисел, сделать
возможным его редактирование.
Удалить из массива четные элементы.
4. Примеры задач с использованием
динамических массивов.
 Пример 5-2. Составить программу
формирования динамической матрицы
А (n строк, m столбцов) случайными
числами, сделать возможным ее
редактирование. Вычислить суммы
элементов в столбцах до k-й строки.
Полученные суммы вставить как строку
перед k-й строкой.