wsk2fun





Programowanie w C++ - Wskaźniki do funkcji



WSKAŹNIKI INDEX

Programowanie w C++Wskaźniki do funkcji


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.

WSKAŹNIKI INDEX






Wyszukiwarka