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:

Dwie ważne uwagi na początek.

  1. Typ wskaźnika do funkcji musi zgadzać się z typem funkcji.
  2. 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