Wskaźniki mogą wskazywać różne obiekty. Okazuje się, że mogą także wskazywać na funkcje. Wskaźnik do funkcji identyfikuje jakiś obszar pamięci, w którym zaczyna się kod będący instrukcjami żądanej funkcji. Początek funkcji ma adres, a wskaźnik do niej zawiera właśnie ten adres. Wskaźniki do funkcji:
pozwalają uzyskać adres funkcji; mogą być argumentami formalnymi funkcji i wartościami zwracanymi przez funkcję; mogą być przekazywane do funkcji jako argumenty aktualne w wywołaniach; można używać ich w instrukcjach przypisania; można je również umieszczać w tablicach.
Dwie ważne uwagi na początek.
Typ wskaźnika do funkcji musi zgadzać się z typem funkcji. Na wskaźnikach do funkcji nie można robić działań arytmetycznych.
Ćwiczenia ze wskaźników do funkcji rozpoczniemy od prostego przykładu zawartego w pliku wsk2f.cpp. Deklarujemy w nim funkcję obliczającą pole kwadratu o zadanym boku oraz wskaźnik do funkcji, który posłuży nam do pokazywania na tę funkcję. W funkcji głównej podajemy bok kwadratu, a następnie wywołujemy parę razy funkcję kwadrat. W pierwszym przypadku jest to wywołanie bezpośrednie. Dla szeregu kolejnych wartości podanej liczby dokonujemy wywołań pośrednich funkcji kwadrat poprzez wskaźnik wsk_do_kw. Przypisanie adresu funkcji do wskaźnika dokonywane jest na dwa równoważne sposoby: wsk_do_kw = &kwadrat; wsk_do_kw = kwadrat; Widzimy więc, że nie jest konieczny operator pobrania adresu przed nazwą funkcji. Występuje tu analogia do tablic - nazwa funkcji jest adresem jej początku. Pamiętajmy jednak, że nie można w takim podstawieniu dołożyć nawiasów (operatora wywołania) za nazwą funkcji. Błędne byłyby zatem takie instrukcje: wsk_do_kw = &kwadrat(a); wsk_do_kw = kwadrat(a); Uruchomienie funkcji poprzez wskaźnik też ma dwa sposoby: wsk_do_kw(a + 2); (*wsk_do_kw)(a + 3); Obie metody mówią kompilatorowi, aby funkcję, na którą pokazuje wskaźnik, uruchomić z podanym argumentem (tj. odpowiednio a + 2 i a + 3). W pliku wsk2fun.cpp znajduje się przykład wykorzystania tablicy wskaźników do funkcji.