Mutatókat funkciók, programozás C és C

Ahhoz, hogy megértsük, hogyan mutatókat működjön, meg kell érteni, hogyan kell összeállítani, és hívja a funkciót C. Ahogy a forráskódot fordítjuk funkciók átalakul egy objektumot, és állítsa be a belépési pont. Amikor felhívja a funkció rendelkezésre áll, hogy ezt a belépési pont. Ezért a függvény pointer hívtuk a funkciót.

void ellenőrzés (char * a, char * b, int (* CMP) (const char *, const char *))
printf ( "Vizsgálat az egyenlőség \ n.");
ha printf ( "Equal") ((* cmp) (a, b)!);
mást printf ( "Nem egyenlő");
>

Tekintsd meg az strcmp () függvény a készülék működését (). operátor

ha printf ( "Equal") ((* cmp) (a, b)!);

Ellátja a függvényhívás, ebben az esetben strcmp () segítségével cmp, amely jelzi a funkciót. Hívás történik érveket a és b. Ez a kijelentés azt az általános nézetet használatának a mutatót a funkciót, hogy hívja a funkciót, amelyre utal. A zárójelbe * cmp szükséges jelenléte miatt a prioritásokat. Sőt, akkor közvetlenül cmp, az alábbiak szerint:

ha printf ( "Equal") (CMP (a, b)!);

Ez a verzió is meghívja a függvényt által mutatott cmp, de használ a normális szintaxis. Használata (CMP) segít mindenkinek, aki olvassa a program, és megérteni, hogy a funkció mutatót arra használjuk, hogy hívja a funkció helyett a funkció meghívása cmp. Talán az ok közvetlenül ellenőrizze (), használva strcmp, az alábbiak szerint:

ellenőrzés (s1, s2, strcmp);

Ez szükségtelenné teszi az üzemeltető további változó mutató.

Felmerül, hogy miért akar valaki írni egy programot ezen a módon. Ebben a példában nem érjük, de nagy problémák vannak. Néha azonban vannak pillanatok, amikor az átviteli függvény előnyös eljárás vagy függvény tárolására tömböket. Az alábbi példa bemutatja a függvénymutatók. Írásakor tolmács leginkább jellemzően függvényhívásokkal különböző támogatási rutinok, mint a szinusz, koszinusz és tangens. Ahelyett, hogy egy nagy listát a switch, akkor egy sor függvénymutatók, ahol elérheti a kívánt funkciót a mutató. Ebben a programban, check () lehet használni, hogy teszteljék mind alfabetikus és numerikus egyenlőség egyszerűen hívja a különböző összehasonlító funkciók.

#include
#include
#include
#include
void ellenőrzés (char * a, char * b, int (* CMP) (const char *, const char *));
int numcmp (const char * egy, const char * b);
int main (void)
char s1 [80], s2 [80];
jelentkeznek (S1);
kap (s2);
if (isalpha (* s1))
ellenőrzés (s1, s2, strcmp);
más
ellenőrizze (s1, s2, numcmp);
vissza 0;
>

void ellenőrzés (char * a, char * b, int (* CMP) (const char *, const char *))
printf ( "Vizsgálat az egyenlőség \ n.");
ha printf ( "Equal") ((* cmp) (a, b)!);
mást printf ( "Hot egyenlő");
>

int numcmp (const char * egy, const char * b)
Ha (atoi (a) == atoi (b)) return 0;
else return 1;
>

Kapcsolódó cikkek