Δείκτης συνάρτησης

Στον προγραμματισμό Η/Υ ένας δείκτης συνάρτησης (Αγγλικά: 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;
}

Παραπομπές 

Προγραμματισμός
Τύποι δεδομένων