Pointeri la funcții, programare în C și c

Pentru a înțelege modul în care indicii să funcționeze, trebuie să înțelegeți modul de a compila și a apela o funcție în C. Pe măsură ce compilați funcțiile de cod sursă este transformat într-un obiect și a stabilit punctul de intrare. Când apelați funcția este accesată la acest punct de intrare. Prin urmare, indicatorul funcție este utilizată pentru a apela funcția.

cec void (char * a, char * b, int (* cmp) (char const *, const char *))
printf ( "Testarea pentru egalitatea \ n.");
dacă printf ( "Egal") ((* cmp) (a, b)!);
altfel printf ( "Nu este egal");
>

Luați în considerare activitatea funcției strcmp () în verificarea funcției (). operator

dacă printf ( "Egal") ((* cmp) (a, b)!);

Se efectuează un apel de funcție, în acest caz strcmp (), folosind cmp, care indică funcția. Apel are loc cu argumente a și b. Această afirmație prezintă o vedere generală a utilizării pointer la funcția de a apela o funcție pentru care. Parantezele din jurul * cmp necesară datorită prezenței priorităților. De fapt, puteți utiliza direct cmp, după cum se arată mai jos:

dacă printf ( "Egal") (cmp (a, b)!);

Această versiune, de asemenea, solicită, funcția indicat de cmp, dar utilizează sintaxa normală. Utilizarea (cmp) îi ajută pe toți cei care citesc programul și să înțeleagă că indicatorul funcție este utilizată pentru a apela o funcție în loc de a apela funcția CMP. Poate cauza este verifica direct (), folosind strcmp, așa cum se arată mai jos:

verificare (s1, s2, strcmp);

Acest lucru elimină necesitatea ca operatorul unui indicator variabil suplimentar.

Se poate întreba de ce cineva ar vrea să scrie un program în acest fel. În acest exemplu, nimic nu este atins, dar există probleme mari. Cu toate acestea, uneori, există momente când funcția de transfer este benefic în proceduri sau funcții pentru stocarea de matrici. Următorul exemplu demonstrează utilizarea pointeri la funcții. Când scrieți un interpret utilizați cel mai tipic funcția de apeluri la diverse rutine de sprijin, cum ar fi sinus, cosinus și tangenta. În loc de a folosi o listă mare pentru declarația de comutare, puteți utiliza o serie de indicii de funcții, în care accesul la funcția dorită cu ajutorul indicelui. În acest program, de verificare () poate fi folosit pentru a testa atât egalitatea alfabetic și numeric prin simpla apelare a diferitelor funcții de comparație.

#include
#include
#include
#include
cec void (char * a, char * b, int (* cmp) (char const *, const char *));
int numcmp (const char * a, const char * b);
int main (void)
char s1 [80], s2 [80];
devine (s1);
devine (s2);
în cazul în care (isalpha (* s1))
verificare (s1, s2, strcmp);
altfel
verifica (s1, s2, numcmp);
return 0;
>

cec void (char * a, char * b, int (* cmp) (char const *, const char *))
printf ( "Testarea pentru egalitatea \ n.");
dacă printf ( "Egal") ((* cmp) (a, b)!);
altfel printf ( "Hot egal");
>

numcmp int (const char * a, const char * b)
Dacă (atoi (a) == atoi (b)) return 0;
altceva întoarcere 1;
>

articole similare