Στον προγραμματισμό Η/Υ ένας **δείκτης συνάρτησης** (Αγγλικά: *Function pointer*) είναι ένα είδος δείκτη δεδομένων ο οποίος υποστηρίζεται από την τρίτη γενιά γλωσσών προγραμματισμού όπως τη Fortran (ονομάζομαι *procedure pointers* στην Fortran ) και τη C/C++.   Η διαφορά με τον απλό δείκτη είναι ότι ένας δείκτης σε συνάρτηση δείχνει το σημείο στην μνήμη το οποίο περιέχει εκτελέσιμο κώδικα και όχι δεδομένα. Όταν χρησιμοποιείται ο τελεστής έμμεσης αναφοράς (dereferencing operator) καλείται η συνάρτηση όπου ο δείκτης δείχνει με τα αντίστοιχα ορίσματα/παραμέτρους. Οι δείκτες συναρτήσεων χρησιμοποιούνται για την υλοποίηση callbacks (όπου δεδομένα μαζί με ένα δείκτη συνάρτησης περνάνε ως παράμετροι σε μια μέθοδο η οποία στην συνέχεια κάνει την κλήση της συνάρτησης αυτής).

Παράδειγμα C
------------

Στο παρακάτω παράδειγμα έχουμε 2 συναρτήσεις με ίδια ορίσματα (prototype), την add και την sub και τις καλούμε μέσω του δείκτη συνάρτησης fptrCompute. Στην C/C++ δεν μπορούμε να περνάμε συναρτήσεις ως παραμέτρους σε άλλες συναρτήσεις και αυτό μπορεί να γίνει μόνο χρησιμοποιώντας δείκτες συναρτήσεων.

```
#include <stdio.h>
 
// Ορισμός δείκτη συνάρτησης 
int (\*fptrCompute) (int,int);
 
// Συναρτήσεις
int add(int n1, int n2) { return n1+n2; }
int sub(int n1, int n2) { return n1-n2; }
 
int main() {
 // Αρχικοποίηση δείκτη με την συνάρτηση add 
 fptrCompute = add; 
 
 // επιστρέφουν 9 και στις δύο περιπτώσεις
 int result1 = add(4,5);
 int result2 = fptrCompute(4,5); 
 // ισοδύναμη κλήση με dereferencing
 // int result2 = (\*fptrCompute)(4,5);
 
 // 9 9
 printf("%d\t%d\n", result1, result2); 
 
 // Δείκτης με την συνάρτηση sub
 fptrCompute = sub; 

 int result3 = fptrCompute(4,5); 

 // -1
 printf("%d\n", result3);

 return 0;
}

```

Παραπομπές
----------

1. ↑  «Working with Pointers». gcc.gnu.org. Ανακτήθηκε στις 24 Μαΐου 2014.
2. ↑  Andrew J. Miller. «Fortran Examples».  fortranexamples.html. Ανακτήθηκε στις 14 Σεπτεμβρίου 2013.
3. ↑  «The Function Pointer Tutorials». : logo. Ανακτήθηκε στις 13 Απριλίου 2011. Function Pointers are pointers, i.e. variables, which point to the address of a function
4. ↑  Reese, Richard (2013). *Understanding and using C pointers* (1η έκδοση). Sebastopol, CA: O'Reilly Media. σελίδες 188-190. ISBN 978-1-449-34418-4.

|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| π • σ • ε
Τύποι δεδομένων |
| --- |
|  |
| Χωρίς ερμηνεία | 
Bit · Byte · Trit · Tryte · Λέξη |
|  |
| Αριθμητικοί | 
Ακέραιος · Σταθερής υποδιαστολής · Κινητής υποδιαστολής · Πραγματικός · Μιγαδικός · Bignum · Διάστημα |
|  |
| Κείμενο | 
Χαρακτήρας · Συμβολοσειρά |
|  |
| Δείκτες | 
Διεύθυνση · Αναφορά · Δείκτης συνάρτησης |
|  |
| Σύνθετοι | 
Αλγεβρικός τύπος δεδομένων (γενικευμένος) · Πίνακας · Πίνακας αντιστοίχισης · Κλάση · Λίστα · Αντικείμενο · Τύπος επιλογής · Γινόμενο · Εγγραφή · Σύνολο · Ένωση (με ετικέτες) |
|  |
| Άλλοι | 
Αλήθειας · Bottom type · Συλλογή · Τύπος απαρίθμησης · Εξαίρεση · Τύπος συνάρτησης · Αδιαφανής τύπος δεδομένων · Αναδρομικός τύπος δεδομένων · Σημαφόρος · Stream · Top type · Κλάση τύπου · Unit type · Void |
|  |
| Σχετικά θέματα | 
Αφηρημένος τύπος δεδομένων · Δομή δεδομένων · Interface · Kind · Πρωτογενής τύπος δεδομένων · Υποτύποι · Template · Κατασκευαστής τύπων · Παραμετρικός πολυμορφισμός · Πολυμορφισμός υποτύπων |

 |