Jak należy używać tablicy wskaźników funkcji w C?
Jak mogę je zainicjować?
c
initialization
function-pointers
Facet w kapeluszu
źródło
źródło
(*p[4]) (int, int) {sum,substract,mul,div}
Powyższe odpowiedzi mogą ci pomóc, ale możesz też chcieć wiedzieć, jak używać tablicy wskaźników funkcji.
Do pojedynczej tablicy wskaźników funkcji można przypisać tylko adresy funkcji o tym samym zwracanym typie i tych samych typach argumentów oraz bez argumentów.
Możesz również przekazać argumenty jak poniżej, jeśli wszystkie powyższe funkcje mają taką samą liczbę argumentów tego samego typu.
Uwaga: tutaj w tablicy numeracja wskaźników funkcji będzie rozpoczynać się od 0, tak jak w przypadku tablic ogólnych. Więc w powyższym przykładzie
fun1
można wywołać, jeśli opcja = 0,fun2
może zostać wywołana, jeśli opcja = 1 ifun3
może zostać wywołana, jeśli opcja = 2.źródło
(*func_ptr[3])
na,(*func_ptr[3])()
a zostanie skompilowanyOto, jak możesz z niego korzystać:
New_Fun.h
New_Fun.c
Main.c
Mam nadzieję, że to pomoże w zrozumieniu
Function Pointer.
źródło
f1, f2 ...
a zamiast tego wprowadź `` writefile, readfromfile ... '' ... staje się bardziej redableTa „odpowiedź” jest raczej dodatkiem do odpowiedzi VonC; wystarczy zauważyć, że składnię można uprościć za pomocą definicji typu i można użyć inicjalizacji agregacji:
źródło
Och, jest mnóstwo przykładów. Wystarczy spojrzeć na cokolwiek w glib lub gtk. Możesz zobaczyć działanie wskaźników funkcji w pracy tam przez całą drogę.
Tutaj np. Inicjalizacja rzeczy gtk_button.
A w gtkobject.h znajdziesz następujące deklaracje:
Element (* set_arg) jest wskaźnikiem do funkcji i można mu np. Przypisać inną implementację w jakiejś klasie pochodnej.
Często widzisz coś takiego
Możesz więc sięgnąć do tabeli po nazwie i wywołać funkcję „skojarzoną”.
A może używasz tablicy mieszającej, w której umieszczasz funkcję i nazywasz ją „po nazwie”.
Pozdrawiam
Friedrich
źródło
Można go używać w następujący sposób:
źródło
Powinien to być krótki i prosty przykład kopiowania i wklejania powyższych odpowiedzi. Mam nadzieję, że to pomoże.
źródło
Najprostszym rozwiązaniem jest podanie adresu docelowego wektora i zmodyfikowanie go wewnątrz funkcji.
źródło
Na to pytanie udzielono już bardzo dobrych przykładów. Jedynym przykładem, którego może brakować, jest ten, w którym funkcje zwracają wskaźniki. Napisałem kolejny przykład z tym i dodałem wiele komentarzy, na wypadek gdyby ktoś uznał to za pomocne:
źródło
Ten prosty przykład wielowymiarowej tablicy ze wskaźnikami funkcji ":
źródło