КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Передача значений как массива
Передача массивов в качестве параметров
В Паскале разрешается указывать в качестве параметров массив с неопределенными границами. procedure Sum(A: array of Byte); Теперь массив, описанный как var Ar: array [1..25] of Byte; можно без проблем передавать в процедуру Sum: Sum(Ar); При этом внутри тела подпрограммы действуют следующие правила: Зместо указания в параметрах при обращении к подпрограмме имени переменной-ассива можно указать непосредственно содержимое этого массива: список значе-ий через запятую в квадратных скобках. Sum([1, 5, X, a+b*2]);
Массив, описанный как array [1..MaxNum] of Variant; может быть передан в качестве параметра в подпрограмму, если этот параметр описан как a rray of const: procedure Sum(A: array of const), Внутри тела подпрограммы надо анализировать перед обработкой тип каждого элемента этого массива.
Подпрограммы с точки зрения прикладного программиста вызываются всегда оди-наково, но машинный код, который создается компилятором, для разных подпрограмм может отличаться. Это зависит от целей применения конкретной подпрограммы. Она может использоваться: Таблица 1.10. Ключевые слова в заголовке подпрограмм Ключевое слово Способ передачи параметров register Способ, применяемый по умолчанию. Аналогичен использованию cdecl В соответствии с соглашениями компиляторов для языков stdcall В соответствии с соглашениями Windows safecall Используется при работе с компонентными технологиями При использовании ключевых слов register и pascal вычисление параметров выполняется слева направо и располагаются они в оперативной памяти перед вызовом подпрограммы в таком же порядке. При использовании ключевых слов cdecl, stdcall и safecall параметры располагаются в обратном порядке (справа налево). procedure Sum(A: array of const); stdcall;
Паскаль требует, чтобы любой идентификатор, будь то переменная или подпрограмма, был предварительно, до первого своего использования, описан. В таком круговом процессе (пример условный, потому что приведенная схема может привести к бесконечной цепочке вызовов) процедура Р2, вызываемая в теле процедуры Р1, расположенной выше в исходном тексте, еще не описана, следовательно, обращаться к ней нельзя и компилятор сообщит, что обнаружен неопределенный идентификатор. Неправильно: procedure PI; procedure P2; Правильно: procedure P2; forward; procedure P2; Теперь компилятор знает, как выглядит заголовок процедуры Р2, и может корректно сгенерировать машинный код для обращения к ней. Перегружаемые подпрограммы При вызове такой подпрограммы компилятор по типам параметров автоматически определит, какую же подпрограмму конкретно надо использовать в данном месте.
begin procedure Ovl(X: Byte); overload; begin Ovl(1); // вызывается процедура Ovl(X: Byte) Ovl(1.0); // вызывается процедура Ovl(X: Real)
procedure Ovl(X: Byte; Y: Real = 1); overload; procedure Ovl(X: Byte); overload; При вызове Ovl(1)
компилятор не сможет понять, какую из двух процедур ему вызывать, и сообщит об ошибке.
Сразу за заголовком подпрограммы следует локальное описание типов, переменных и констант, локальных для данной подпрограммы и существующих только в ее границах. Такое описание подчиняется обычным правилам Паскаля. В нем разрешается использовать слова type, var и const. Локальное описание может быть опущено.
Помимо обычных описаний, внутри подпрограммы допускается объявлять также локальные подпрограммы, к которым можно обращаться (вызывать) только из тела «родительской» подпрограммы. При этом локальная подпрограмма может свободно обращаться к любым локальным описаниям (переменным, типам), которые расположены до описания данной подпрограммы.
procedure InDemo;
Дата добавления: 2014-12-25; Просмотров: 1272; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |