Указатели и динамические массивы Delphi. Тема 5.
План темы: b1b1b1b1.... С С С С тттт аааа тттт ииии чччч ееее сссс кккк оооо ееее и и и и д д д д ииии нннн аааа мммм ииии чччч ееее сссс кккк оооо ееее рррр аааа сссс пппп рррр ееее дддд ееее лллл ееее нннн ииии ееее о о о о пппп ееее рррр аааа тттт ииии вввв нннн оооо йййй п п п п аааа мммм яяяя тттт ииии.... b2b2b2b2.... П П П П оооо нннн яяяя тттт ииии ееее у у у у кккк аааа зззз аааа тттт ееее лллл яяяя.... b3b3b3b3.... О О О О рррр гггг аааа нннн ииии зззз аааа цццц ииии яяяя д д д д ииии нннн аааа мммм ииии чччч ееее сссс кккк ииии хххх мммм аааа сссс сссс ииии вввв оооо вввв.... b4b4b4b4.... П П П П рррр ииии мммм ееее рррр ыыыы з з з з аааа дддд аааа чччч с с с с и и и и сссс пппп оооо лллл ьььь зззз оооо вввв аааа нннн ииии ееее мммм дддд ииии нннн аааа мммм ииии чччч ееее сссс кккк ииии хххх м м м м аааа сссс сссс ииии вввв оооо вввв....
1. Статическое и динамическое распределение оперативной памяти. bВbВbВbВсе данные программы во время ее выполнения размещаются в оперативной памяти. bПbПbПbПри этом часть данных размещается в памяти еще на этапе компиляции и в процессе работы программы их адреса относительно начала программы не изменяются. Такое размещение данных называется статическим и соответствующие этим данным переменные называются статическими переменными.
bВbВbВbВ языке Паскаль возможна также организация динамического размещения данных, при котором под некоторые данные память выделяется непосредственно во время выполнения по мере надобности, а после решения требуемой задачи память освобождается для других данных. Соответствующие таким данным переменные называются динамическими переменными.
2. Понятие указателя. bДbДbДbДля организации динамического распределения памяти используются переменные специального типа – указатели, которые обеспечивают работу непосредственно с адресами ячеек памяти. bЗbЗbЗbЗначением указателя является адрес памяти, где хранятся некоторые данные.
bОbОbОbОпределение и использование указателей: var n : ^integer; //определение указателя New(n); //выделение памяти n^:=25; //использование указателя n:=nil; //освобождение памяти
3. Организация динамических массивов. bОbОbОbОбычно динамическое выделение и освобождение памяти используется при работе с массивами данных. bПbПbПbПреимущества динамических массивов над статическими: - Экономное использование памяти; - Возможность изменять размер массива во время работы программы.
//определение: 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. Организация динамических массивов. bНbНbНbНумерация элементов в динамическом массиве начинается с 0. bПbПbПbПроцедуру SetLength() в процессе выполнения программы можно вызывать произвольное количество раз. Каждый вызов приводит к изменению длины массива, причем содержимое массива сохраняется.
bДbДbДbДля работы с динамическими массивами можно использовать следующие функции: High(A) – возвращает наибольшее значение номера (индекса) в динамическом массиве. Copy(A, n, m) – возвращает часть динамического массива A от элемента с номером n до элемента с номером m.
4. Примеры задач с использованием динамических массивов. bПbПbПbП рррр ииии мммм ееее рррр Составить программу формирования динамического массива А из N случайных чисел, сделать возможным его редактирование. Удалить из массива четные элементы.
bПbПbПbП рррр ииии мммм ееее рррр Составить программу формирования динамической матрицы А (n строк, m столбцов) случайными числами, сделать возможным ее редактирование. Вычислить суммы элементов в столбцах до k-й строки. Полученные суммы вставить как строку перед k-й строкой.