User:Наркес

= Функция көрсеткіштері = Функция көрсеткіштері, сонымен қатар кіші бағдарлама көрсеткіштері немесе процедура көрсеткіші дегеніміз  фунцияға бағыттайтын меңзерлер болып табылады. Ол деректің сілтемесін емес,  функция көрсеткіші жадында орындалатын кодты көрсетеді. Көрсеткіш бағыттайтын нысанға сілтеме жасау, әдеттегі қарапайым функцияда шақырылатын қоңыраулар арқылы орындалады. Мұндай қоңырау сондай-ақ «жанама» қоңырау ретінде белгілі, себебі функция «тікелей»тіркелген идентификатор немесе мекен-жай арқылы емес, айнымалы арқылы шақырылады.

Функция көрсеткіштерін кодты жеңілдетуге, яғни,  функцияның орындалатын уақыты негізіне сүйене отырып қолдануға болады.

Функциялардың көрсеткіштерін үшінші буынды бағдарламалау тілдерімен (PL/I, COBOL, Fortran, dBASE dBL және C сияқты) және объектілі-бағытталған бағдарламалау тілдерімен (C++ және D сияқты) қолдану ұсынылған.

= Қарапайым функция көрсеткіштері = Жады ішінде функцияның  мекен-жайын қамтитын айнымалның болуы, көрсеткіштік функцияның жүзеге асуының ең қарапайым жолы болып табылады. Үшінші буынды PL/I және COBOL, сондай-ақ қазіргі заманғы Паскаль және С программа тілдерінде де функционалды көрсеткіштер дәл осылай жүзеге асырылады.

Мысал (С бағдарлама тілінде)
Келесі С бағдармала тілі  көрсеткіштік функцияның екі түрін түсіндіреді:

Келесі бағдарлама екі функцияның бірін (sin немесе cos) жанама шақыру үшін функцияның көрсеткішін пайдаланады (compute_sum, функцияның Римандық интеграциясының аппроксимациясын есептеу). Бағдарлама main call function compute_sum функциясына ие бола отырып, оны sin кітапханалық функциясына бірінші рет және cos функциясына екінші рет жіберу арқылы екі рет жұмыс істейді. Compute_sum функциясы, өз кезегінде, funcp функциясы көрсеткішінің аргументін бірнеше рет қайталап, шақырылатын функциямен қайтарылатын мәндерді қосып, алынған соманы қайтару арқылы екі функцияның бірін шақырады. Бұл екі сома main бойынша стандартты мәнін шығаруға жазылады.
 * Функция 1: Екі реттік параметрді қабылдап, өзге екі ретік параметрді жауап ретінде, яғни, сантиметрді дюймге айналдыру функциясы көрсетілген.
 * Функция 2: Функция көрсеткіші тұрақты массив таңбаларын және бүтін сандарды қабылдап,  таңба көрсеткіштерін қайтарады, сонымен қатар С тілі жолдарын өңдеу функциялары тағайындалады, ол таңбаның таңбалар массивіндегі бірінші реттік көрсеткішін қайтрады.

= Функтор = Функтор, сондай-ақ функция нысандары функция көрсеткіштеріне өте ұқсас және бірдей мақсатта қолданылады. Функтор – бұл функцияны шақыру сияқты  синтаксисті пайдаланатын процесстерде нысанды қолдануға мүмкіндік беретін класс түрі. Функторлар көрсеткіштерге қарағанда қуаттырақ, себебі ол өзінің жеке деректер мәндерін қамтуға және орындаушыға жабылуларды эмуляциялауға мүмкіндік беруге қабілетті. Олар қажет жағдайда  кері қоңырау функциясы ретінде пайдаланылады.

Көптеген "таза" объектілі-бағытталған тілдер функциялардың көрсеткіштерін қолдамайды. Алайда, мұндай нәрсе бір әдісті анықтайтын интерфейстерге сілтемелерді пайдалана отырып, тілдердің осы түрлерінде іске асырылуы мүмкін (функция мүшесі). C# және Visual Basic.NET сияқты командалық жолдың интерфейс тілдері  жалпы типтегі көрсеткіштерді делегаттар арқылы іске асырады.

Бірінші сыныпты функцияларды қолдайтын басқа тілдерде функциялар деректер ретінде қарастырылады және басқа функциялармен тікелей динамикалық түрде берілуі, қайтарылуы және жасалуы мүмкін, бұл функциялардың көрсеткіштерінде қажеттілігін болдырмайды.

Функция көрсеткіштерін кеңінен пайдалану кодтың заманауи процессордағы жұмысын баяулатады, себебі тармақ болжаушысы тармақ бағытын анықтауға қабілетсіз болып қалуы мүмкін (функция көрсеткішінің іске асыру кезіндегі мәніне қарай), алайда әсер әлде қайда жоғары болуы да мүмкін, себебі ол индекстелмеген кестелерді іздеу арқылы айтарлықтай жиі азайтылған.

= Әдіс көрсеткіштер = C++ объектілі-бағытталған бағдарламаны қолдайды, сондықтан кластардың әдістері болуы мүмкін (әдетте функциялар-мүшелер деп аталады). Статикалық емес функция (жағдай әдісі) мүшесі, ол жұмыс істейтін объектінің көрсеткіші болатын айқын емес (this көрсеткіші) параметрге ие, сонымен функция көрсеткішінің бір бөлігі объект түрін қамтуы қажет. Содан кейін бұл әдіс белгілі класс объектісі үшін «мүшеге көрсеткіш» операторларының бірін қолданады : « .* »  немесе «*»  (сәйкесінше, нысан немесе нысан көрсеткіші).

Алайда С және C++ функция көрсеткіштері  қарапайым мекен-жай ретінде жузеге асуы мүмкін болса да, sizeof(Fx)==sizeof(void *), C++ көрсеткіштері  кейде «майлы көрсеткіштер» ретінде іске асырылады, әдетте виртуалды әдістер мен виртуалды мұрамен айналысатын қарапайым функция көрсеткішінің өлшемінен екі немесе үш есе артық.

= С++ тілінде =

C++ -та  С тіліндегі әдістерге қосымша, std::function стандартты кітапхана үлгісін қолдануға болады, ондағы жағдайлар функция объектісі болып табылады.

С++ тіліндегі мүшелік функцияларға сілтеме
Бұл C++ тың көрсеткіштерді мүшелік функциялардың класстары немесе құрылымдарымен жұмыста пайдалануын көрсетеді. Олар нысан көрсеткіші немесе this қоңырауы арқылы шақырылады. Олар тек бір класстың мүшесін(немесе туындасын) дәл сол класстың көрсеткішін қолдана отырып шақырғанда ғана қауіпсіз болып келеді. Бұл мысал мүшелік функция көрсеткішінің ұарапайымдылығы үшін typedef-ты ұсынады. Статикалық мүшелер функциясының көрсеткіштері дәстүрлі "C" стилінде орындалады, себебі бұл қоңырау үшін нысан көрсеткіші қажет емес.

= С және С++ балама синтаксисі = Жоғарыда келтірілген C және C синтаксисі барлық оқулықтарда пайдаланылатын каноникалық болып табылады, бірақ оны оқу және түсіндіру қиын. Тіпті жоғарыда келтірілген мысалдарда typedef бұл синтаксис қолданады. Дегенмен, әрбір C және C компиляторы функциялар көрсеткіштерін жарнамалауда неғұрлым айқын және қысқа механизімді қолдайды: typedef пайдаланыңыз, бірақ анықтаудың бөлігі ретінде көрсеткішті сақтамаңыз. Шын мәнінде, бұл typedef түрін тек көрсеткішпен ғана пайдалануға болады - бірақ бұл оның көрсеткішін атап көрсетеді.

C++
Бұл мысалдарда жоғарыда келтірілген анықтамалар қолданылады. Атап айтқанда, Fn үшін жоғарыда берілген анықтама көрсеткіш анықтамасында мүше функциясына пайдаланылуы мүмкін екенін ескеріңіз: