Function Wskaźniki w C

C

czere

Guest
Gdzie iw jakich sytuacjach możemy użyć wskaźników funkcji wbudowanych w C?

Czy ktoś wytłumaczyć?

Dzięki ..... Cherry

 
Cytat:

Wskaźniki do funkcji nie są tak jak inne wspólne wskaźnik zastosowań.
Jednakże jedno wspólne wykorzystanie w przekazując wskazówki do funkcji jako parametr do wywołania funkcji.
 
Kolejny wspólny wniosek jest wywołania funkcji.Na przykład, chcesz, aby system Windows połączenia audio rejestrator funkcji Windows za każdym razem otrzymuje kilka próbek z mikrofonu.Dajesz Windows wskaźnik do funkcji rejestratora dźwięku.

 
Funkcja wskazówek nie są często stosowane w wbudowanych C, więcej na stronie PC programowania.Zasadniczo jest to wskaźnik do funkcji, a które w zależności od funkcji wskaźnika wskazuje, można realizować różne funkcje, które mają być wykonane w tej samej linii kodu.

Przykładem sposobu użytkowania jest to, że masz tablicę wskaźników funkcji, co wskazuje na obsługę wiadomości, z których każdy inny typ wiadomości, który jest przeznaczony do prowadzenia tego samego indeksu jako wiadomość obsługi.

Tak więc można połączyć coś
Kod:fnPtr [msg-> type] (msg);

 
jest to dobry wybór aby zastąpić przełącznik przypadku w stanie maszyna funkcję wskaźnika,
w przypadku tego państwa maszyna ma zbyt wielu przypadkach przełączać.to czyni program bardziej zwarty.

 
Jest to dobry dokument na ten temat

http://www.newty.de/fpt/zip/e_fpt.pdf

http://www.newty.de/fpt/index.html

/ Bingo

 
Funkcja wskazówek są bardzo przydatne w systemach wbudowanych.Jak usprawnić switch.Również bardzo przydatne w menu systemu.Jeżeli menu jest wybrany indeks functon o wskaźnik tablicy.

Na przykład, każde państwo funkcji tutaj powróci następnego, aby przełączyć się na stanie.
Kontrolującego kod całego programu w jednej linijce!

Kod:/*--- Członkowskiego maszyny funkcji.
---*/UI_16 gotowości (void);

UI_16 począwszy (void);

UI_16 jazdy (void);/*--- Państwa Machine.
---*/enum (STANDBY = 0, URUCHAMIANIE, RUNNING);/************************************************* ********************

* Funkcja Imię i nazwisko: główne

* Opis: Program punktu.

Initialise stałej tablicy wskaźników funkcji.

Initialise maszyny do stanu gotowości.

Wykonaj stan maszyny.************************************************** *******************/SI_16 main (void)

(

UI_16 (* const Motor_State []) (void) = (gotowości, poczynając, bieganie);

UI_16 państwa = STANDBY;dla (;;){

Państwa = Motor_State [państwa] (); / * stan połączenia funkcji * /

)

)/*--- Koniec pliku.
---*/

 
witaj
najlepsze wykorzystanie funkcji wskaźnika, co czuję jest implimentation FM i jak to powiedział jeden erlier
2-ta oddzwaniać funkcji.

 
Funkcja wskazówki są przydatne, gdy u ma ogólnych postępowania lub algo u chcą korzystać z tej procedury w sprawie różnych rodzajów danych.

Na ex. Razie u have a good sortowanie algo, oraz u chcesz używać tych samych numerów na algo, alfabetycznie, łańcuchy lub jakichkolwiek danych regulowane przez niektóre reguły sortowania.W takim przypadku, i muszą tylko napisać różnych "porównanie" funkcję dla każdego typu danych w głównym sortowanie algo, u przekazać funkcję wskaźnika jako argumentu.
W ten sposób,
ten sam algo mogą być wykorzystane przez różne ppl na ich potrzeby.Nie jest wymagane zmiany w głównym organem algo.

 
Mam currenlty używanych funkcji wskazówki w moim C projektu, który jest napędzany menu edytora.Celem tych wskazówek jest napisać wydajne, kompaktowe i szybkie kodu.Mój kod saple jest tutaj;

Wartość int [] = (0x1F00, / / Alt S (^ Setup)
0x1400, / / Alt T (^ Trunks)
0x1200, / / Alt E (^ Rozszerzenia)
0x1800, / / Alt O (^ Operator)
0x2600, / / Alt L (^ Logging)
0x1900, / / Alt P (^ haseł)
0x2200, / / Alt G (Settin ^ gs)
0x2300 / / Alt H (Pomoc ^)
);

/ / ------ Wskaźniki do funkcji ---------------------------------
void (* Execute [8 ])();// Menu główne funkcje
void (* Setup [3 ])();// Element menu funkcji
void (* Trunks [9 ])();
void (* Rozszerzenia [4 ])();
void (* Operator [3 ])();
void (* Logging [2 ])();
void (* Hasła [3 ])();
void (* Ustawienia [6 ])();
void (* Pomoc [10 ])();
//------------------------------------------------ ---------------

main ()
(
....
/ / Zainicjuj funtion pointers
Execute [0] = ProcessSetup;
Execute [1] = ProcessTrunks;
Execute [2] = ProcessExtensions;
Execute [3] = ProcessOperator;
Execute [4] = ProcessLogging;
Execute [5] = ProcessPasswords;
Execute [6] = ProcessSettings;
Execute [7] = ProcessHelp;
......

/ / Odczyt klawiatury ...
i = bioskey (1);
if (i) / / Jeżeli klawiatura gotowa ...
klucz = bioskey (0);
w przeciwnym razie
dalej; / / Jeśli klawiatura nie jest gotowy a następnie kontynuować oglądanie go

/ / Execute menu wybrane przez użytkownika
for (j = 0; j <8; j )
(
if (klawisz == wartość [J])
(
if (! inProcess)
(
inProcess = 1;
Execute [j] ();
)
)
else if (klawisz == 0x2D00) / / Alt X naciśnięciu ... czyli Zamknij
powrotu;
)
..........

 

Welcome to EDABoard.com

Sponsor

Back
Top