ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 01.04.2021
Просмотров: 589
Скачиваний: 3
Модификаторы, определяющие область видимости
Модификатор Описание
local
Локальные подпрограммы не могут быть экспортированы из
библиотек, но позволяют обойтись без прототипов, если
подпрограмма расположена в модуле.
public
Публичные подпрограммы недоступны в модуле, но могут
вызываться из объектных файлов.
Модификаторы, которые влияют на передачу аргументов в подпрограмму
Существует ряд модификаторов, влияющих на внутренний механизм передачи
аргументов в подпрограммы.
Модификатор Описание
cdecl
Стиль вызова Си. Аргументы помещаются в стек справа налево.
Очистку стека выполняет вызывающая подпрограмма.
pascal
Стиль вызова Паскаль. Аргументы помещаются в стек слева
направо. Очистку стека выполняет вызванная подпрограмма.
stdcall
Аргументы помещаются в стек справа налево. Очистку стека
выполняет вызванная подпрограмма.
safecall
Аргументы помещаются в стек справа налево. Очистку стека
выполняет вызванная подпрограмма. Состояние регистров
сохраняется перед вызовом и восстанавливается после выхода
из подпрограммы.
register
Аргументы передаются через регистры процессора.
saveregisters
Аргументы передаются через регистры процессора. Состояние
регистров сохраняется перед вызовом подпрограммы.
interrupt
Аргументы передаются через регистры процессора. Состояние
регистров восстанавливается после выхода из подпрограммы.
nostackframe Запрещает использовать стек для функции.
vargs
Используется для подпрограмм с переменным числом
аргументов.
Глава 8. Инкремент и декремент
Инкрементом называется увеличение значения на единицу. Декремент
выполняет обратное действие. Для этих операций предусмотрены две
подпрограммы. Подпрограмма Inc выполняет инкремент. Подпрограмма Dec
выполняет декремент. Они берут имя переменной как аргумент.
16
Глава 9. Работа с консолью
Что такое консоль?
Программы без графического интерфейса работают с консолью. Этим термином
называют клавиатуру при выполнении операций ввода данных. Консолью
называют дисплей при выполнении операций вывода данных.
Ввод данных с консоли
Чтобы ввести данные с клавиатуры используйте процедуру read или readln. При
вызове этих процедур выполнение программы приостанавливается до тех пор,
пока пользователь не введет нужные данные.
Ввод заканчивается нажатием клавиши Enter. Переменным присваиваются
введенные значения.
Процедура readln переводит курсор на новую строку после окончания ввода.
Обе процедуры берут имя переменной в качестве аргумента. Оно заменяется
списком имен, если необходимо ввести несколько значений. Имена в списке
отделяются запятой.
При вводе нескольких значений они разделяются пробелом.
Вывод данных на консоль
Для вывода данных на экран используйте процедуру write или writeln.
Процедура writeln переводит курсор на новую строку после окончания вывода.
Формат передачи аргументов этим процедурам совпадает с форматом
процедуры read.
Глава 10. Массивы
Зачем нам массивы?
Массивом называют последовательность однотипных данных. К отдельному
элементу массива обращаются по его номеру. Размерностью называют
количество элементов массива.
Многомерным называют массив, состоящий из других массивов. Часто
используют двумерные массивы. Они представляют собой матрицы. С
матрицами вы можете быть знакомы из курса математики. Математики
называют таблицу чисел матрицей.
17
Объявление массива
Синтаксис объявления массива: var имя: array[размерность] of тип;
Размерность указывает количество элементов в массиве.
Формат задания размерности: номер первого..номер последнего элемента
В многомерном массиве следующая размерность указывается после запятой.
Доступ к отдельному элементу массива
К отдельному элементу массива можно обращаться как к переменной, поместив
номер элемента в квадратных скобках после имени массива. Для многомерных
массивов нужно указывать и следующую размерность.
Предположим, что у нас имеется двухмерный массив с именем matrix. Тогда
доступ к элементу первой строки первого столбца осуществляется через
конструкцию matrix[1][1].
Открытые массивы
Для использования массивов произвольной длинны в качестве аргументов
подпрограмм применяются специальные параметры, называемые открытыми
массивами.
Формат объявления параметра: имя: array of тип
Динамические массивы
Динамическим называют массив, память под который выделяется во время
работы программы.
Синтаксис объявления динамического массива: var имя: array of тип;
Память под массив выделяется при помощи подпрограммы SetLength.
Формат вызова подпрограммы SetLength: SetLength(имя,размерность).
Размерность задается, как число определяющее количество элементов. В
многомерном массиве следующая размерность указывается после запятой.
Память автоматически освобождается, как только динамический массив
перестает использоваться. Используйте следующую конструкцию, чтобы
освободить память вручную: имя массива:=nil;
Нумерация в динамических массивах
В динамических массивах нумерация подчиняется жестким правилам.
Первый элемент имеет номер 0. Номер последнего элемента на единицу меньше
размерности массива. Выход за границы массива может повредить данные.
18
Псевдонимы массивов
Для массивов можно определить псевдонимы.
Формат определения псевдонима для обычного массива:
Type псевдоним=array[размерность] of тип;
Формат определения псевдонима для динамического массива:
Type псевдоним=array of тип;
Глава 11. Указатели
Предназначение указателей
Указатель является переменной, которая хранит адрес участка памяти.
Присваивание указателям значения
Значением указателя является адрес. Используйте унарный оператор взятия
адреса @, чтобы получить адрес переменной или другой сущности.
Операция разыменования
Эта операция противоположена по смыслу операции взятия адреса. Операция
разыменования предназначена для получения доступа к данным, на которые
ссылается указатель.
Разыменование указателя
Чтобы выполнить операцию разыменования поставьте знак ^ после имени
указателя.
Нулевые указатели
Указатель, не содержащий адреса, называется нулевым. Чтобы обнулить
указатель, присвойте ему значение nil. Лучше обнулять указатель перед
использованием, чтобы избежать повреждения данных. Так же указатель
необходимо обнулить после освобождения динамического блока памяти.
Не типизированный указатель
Не типизированный указатель ссылается на данные, тип которых не может быть
определен заранее.
Синтаксис объявления для не типизированного указателя: var имя:pointer;
19
Типизированный указатель
Типизированный указатель ссылается на данные заданного типа.
Синтаксис объявления типизированного указателя: var имя:^тип;
Псевдонимы типизированных указателей
Вы можете определить псевдоним для типизированного указателя.
Синтаксис: Type псевдоним=^тип;
Типизированные указатели как аргументы подпрограмм
Используйте псевдоним типизированного указателя, если хотите использовать
его как аргумент подпрограммы или в качестве значения возвращаемого
функцией.
Глава 12. Динамическое распределение памяти
Выделение и освобождение блоков памяти
Блок памяти выделяется при помощи подпрограммы GetMem, которая имеет
две формы. Первая ее форма берет указатель и размер области памяти в
качестве аргументов. Вторая форма берет размер области памяти в качестве
аргумента и возвращает указатель на выделенную память. При этом никаких
дополнительных действий не производиться.
Освобождение выделенного блока производиться подпрограммой FreeMem,
которая имеет две формы. Первая ее форма берет указатель и размер области
памяти в качестве аргументов. Вторая форма берет указатель на блок памяти в
качестве аргумента.
Контроль поведения при динамическом выделении памяти
Как бы много не было памяти, ее все же может не хватить. При нехватке памяти
программа может выбрасывать исключение или обнулять указатель.
Исключением называется ошибка, возникшая во время работы программы. Об
исключениях и модулях вы узнаете в следующей части этой книги.
Присвойте глобальной переменной ReturnNilIfGrowHeapFails значение True,
чтобы обнулять указатель при нехватке памяти. Эта переменная объявлена в
модуле System, который подключается автоматически.
20