- Art Gallery -

 

.

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


Παράδειγμα 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;
}

Παραπομπές

«Working with Pointers». gcc.gnu.org. Ανακτήθηκε στις 24 Μαΐου 2014.
Andrew J. Miller. «Fortran Examples». http://www.esm.psu.edu/~ajm138 fortranexamples.html. Ανακτήθηκε στις 2013-09-14.
«The Function Pointer Tutorials». http://www.newty.de/: logo. Ανακτήθηκε στις 2011-04-13. «Function Pointers are pointers, i.e. variables, which point to the address of a function»
Reese, Richard (2013). Understanding and using C pointers (1st ed. έκδοση). Sebastopol, CA: O'Reilly Media, σελ. 188-190. ISBN 978-1-449-34418-4.

Από τη ελληνική Βικιπαίδεια http://el.wikipedia.org . Όλα τα κείμενα είναι διαθέσιμα υπό την GNU Free Documentation License