Wskaźniki funkcji w C

Wskaźniki funkcji w C
Wskaźniki są kluczową cechą języka programowania C, co daje bezpośrednią kontrolę programisty pamięci używanej w programie. Funkcje są powszechną techniką i składnią w programowaniu C w celu tworzenia bloków kodów wielokrotnego użytku i wywoływania ich w różnych sytuacjach. Ten samouczek Linuksa opisuje wskaźniki funkcji w języku programowania C.

Wskaźnik funkcji jest normalną zmienną wskaźnika C, ale to, co wskazuje, jest funkcją. Umożliwia to programy fantazyjne i dynamiczne, które wywołują różne funkcje w różnych okolicznościach dynamicznie w oparciu o to, na które kiedykolwiek funkcjonuje wskaźnik. Programista tworzy logikę, aby zmienić wartość wskaźnika na różne funkcje z różnych powodów, a wskaźnik wskazuje wskaźnik. Pokazajmy to z niektórymi przykładami.

Przegląd techniczny

Omówimy składnię wskaźników funkcji. Damy nam znać, w jaki sposób możemy spowodować, że wskaźnik wskazuje funkcję; Innymi słowy, w jaki sposób możemy przechowywać adres funkcji za pomocą wskaźnika. Dowiemy się również deklaracji i odniesienia wskaźnika funkcji oraz w jaki sposób wskaźniki funkcji można użyć do wykonania funkcji funkcji wskaźnika.

Składnia

Ogólna składnia do deklaracji wskaźnika funkcji jest następująca:

$ Zwracaj typ funkcji (* nazwa wskaźnika) (typ danych AR_1, typ danych Arg_2)

Metoda deklaracji wskaźnika funkcji jest tak samo jak zwykła deklaracja funkcji; Jedyną różnicą w wskaźniku funkcji jest to, że deklarujemy nazwę wskaźnika funkcji, używamy symbolu * a zmienna jest zawarta w nawiasie, w przeciwieństwie do normalnej funkcji, w której nazwa jest zadeklarowana bez użycia z nią żadnego symbolu. Zadeksujmy wskaźnik funkcji manekina za pomocą jakiegoś hipotetycznego przykładu; Najpierw zadeklaruj dowolną funkcję zwykłą metodą, e.G., int func (int, int). Po deklaracji funkcji Func, Teraz ogłosimy wskaźnik funkcji jako int (*funcptr) (int, int);. Oto ogólna składnia i przypisanie funkcji do wskaźnika funkcji:

// Deklaracja funkcji
int func (int, int);
// Deklaracja wskaźnika funkcji
int (*funcptr) (int, int);
// Przypisanie wskaźnika funkcji
FUNCPTR = FUNC;

Przykład nr 01

W tym przykładzie utworzymy funkcję o nazwie kwadrat z 2 parametrami do obliczania LEN i szerokości prostokąta. [len * szerokość = obszar]. Następnie deklarujemy wskaźnik funkcji i przypisujemy adres kwadrat funkcja do wskaźnika funkcji wywoływana sp. Po otrzymaniu dynamicznych wejść użytkownika wywołujemy funkcję za pomocą wskaźnika funkcji, aby wykonać wykonanie wywołania funkcji.

W ciele funkcji po prostu weźmiemy mnożenie obu zmiennych Len I szerokość Aby obliczyć obszar prostokąta i wyjdź z funkcji zwracającej ten obszar. Wdrożenie przykładów pokazano na poniższym fragmencie:

#włączać
int Square (int len, int szerokość)
Obszar int = len * szerokość;
Obszar powrotu;

int main ()
int l, W, obszar;
int (*sp) (int, int);
printf („Wprowadź długość i szerokość prostokąta:”);
Scanf („%d%d”, i l, i w);
// Przypisz funkcję do wskaźnika funkcji
SP = kwadrat;
// Wskaźnik funkcji połączenia
obszar = (*sp) (l, w);
printf („obszar prostokątny = %d \ n”, obszar);
powrót 0;
Linuxhint@: ~ $ ./FUNC
Wprowadź długość i szerokość prostokąta: 10 4
Obszar prostokąta = 40
Linuxhint@: ~ $

Podaliśmy te same dane wejściowe użytkownika zarówno dla zmiennych L, jak „5”, ponieważ oba reprezentują długość i szerokość kwadratu, które są równe wartości. Wyjście zwróciło kwadrat o wartości 5 jako obszar kwadratu.

Przykład nr 02

Za pomocą tego przykładu utworzymy tablicę wskaźników funkcji, w których każdy element tablicy będzie przechowywał funkcję wskaźnika dla różnych funkcji. Na przykład zadeklarujemy dwie normalne funkcje odejmowania i dodawania z liczbą całkowitą typu return z dwoma parametrami funkcji o typu danych liczb całkowitych. Następnie zadeklarujemy tablicę wskaźników funkcji, a następnie zainicjujemy dwa elementy tablicy z naszymi dwiema funkcjami zadeklarowanymi do dodania i odejmowania. Następnie użyjemy tablicy funkcji wskaźnika z indeksem wskaźnika funkcji tablicy, e.G., „ARR [i]”.

Funkcje dodawania i odejmowania będą wykorzystywać wartości odczytu zainicjowanych zmiennych A I B. Następnie wyświetlimy te wyniki, wywołując metodę printf (). Poniższy fragment pokazuje pełny program dla tego przykładu:

#włączać
int dodawanie (int a, int b)
zwróć A + B;
int subtraction (int a, int b)
zwróć a - b;
int main ()
int a, b;
int (*funkcja [2]) (int, int);
funkcja [0] = dodanie;
funkcja [1] = odejmowanie;
printf („Wprowadź dwie wartości:”);
Scanf („ %d %d”, i a, i b);
int wynik = (*funkcja [0]) (a, b);
printf („Dodatek (a+b) = %d \ n”, wynik);
wynik = (*funkcja [1]) (a, b);
printf („Odejmowanie (a-b) = %d \ n”, wynik);
powrót 0;
Linuxhint@: ~ $ ./FUNC
Wprowadź dwie wartości: 33
11
Dodatek (A+B) = 44
Odejmowanie (A-B) = 22
Linuxhint@: ~ $

Wniosek

Przewodnik zawiera podstawowy przykład i wyjaśnienie wskaźników funkcji w języku C. Uwaga, aby zmienić składnię podczas zmiany ilości parametrów i typu danych, a także jeśli zmienisz typ zwrotu funkcji, wskaźnik funkcji będzie musiał odpowiednio zmienić.