|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Указатели на функцииИмя функции (без параметров и без типа результата) является указателем-константой на эту функцию. Значением этого указателя является адрес размещения операторов функции в оперативной памяти. Это значение адреса можно присвоить другому указателю-переменной на функцию с тем же типом результата и с той же сигнатурой параметров. И затем этот новый указатель можно применять для вызова функции. Введем понятие указателя на функцию. Указатель на функцию – это некоторая переменная, значениями которой будут являться адреса функций, но адреса не любых функций, а функций, характеристики которых (тип результата и сигнатура параметров) должны быть указаны в определении указателя. Определение указателя на функцию: < тип_функции> (* имя указателя) (спецификация_параметров) = < имя инициирующей функции>;
· при определении спецификации параметров достаточно перечислить через запятую типы параметров, имена параметров можно опустить; · тип_функции – это тип результата, возвращаемого функцией; · тип_функции и спецификация_параметров в определении указателя должны совпадать с соответствующими типами и сигнатурами тех функций, адреса которых предполагается присваивать определяемому указателю при инициализации или с помощью оператора присваивания; · инициализация не обязательна, но при ее наличии тип результата, и сигнатура параметров инициирующей функции должна полностью соответствовать указателю. Например: int * (* fptr) (char *, int); int (*ptr) (char*); - определения двух указателей: fptr – указатель на функции с параметрами типа указателяна char и типа int, которые возвращают в качестве результата указатель на int; ptr - указатель на функции с параметрами типа указателяна char, которыевозвращают значение типа int. В примере указатели были определены без инициализации, но в дальнейшем этим указателям – переменным можно присвоить значения указателей – констант на функции, а именно идентификаторы конкретных функций, спецификации которых должны полностью соответствовать спецификациям в определениях указателей. Как только некоторому указателю присвоено имя функции, вызов этой функции можно производить как, используя имя функции, так и, используя имя указателя на функцию, который хранит адрес этой функции. Эквивалентные вызовы функции с помощью указателя на эту функцию: имя указателя (список фактических параметров); (* имя указателя) (список фактических параметров); Рассмотрим пример использования указателя на функции:
//определение функции вычисления длины строки- // количества символов в строке до байтового нуля int len (char * e) { int m=0; while(e[m++]); return m-1; } Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.004 сек.) |