| D:\development\java\netbeans\FirstC\function_ponters.c |
1 /* 2 * A függvénymutatók használatát bemutató kód. 3 * A három dátumkiíró függvény azonos paramétereket vár, és mindháromnak 4 * void a visszatérési típusa. Azaz: ugyanolyan típusú függvénymutatókkal használhatjuk 5 * őket. 6 * A három fügvény különbözőképpen jeleníti meg a dátumokat. A megjelenítést 7 * a valaszto nevű függvénnyel lehet megjeleníteni, ami egy függvénymutatót ad vissza. 8 */ 9 #include<stdio.h> 10 #include<stdlib.h> 11 12 /* 13 * Pontokkal elválasztva jeleníti meg a dátumot. Pl.: 2004.03.24 14 */ 15 void datum_pontokkal(int ev, int ho, int nap){ 16 printf("%d.%d.%d", ev, ho, nap); 17 } 18 19 /* 20 * Angol-szerűen jeleníti meg a dátumot. Pl.: 24.03, 2007. 21 */ 22 void datum_angolul(int ev, int ho, int nap){ 23 printf("%d.%d, %d", nap, ho, ev); 24 } 25 26 /* 27 * A hónapok neveit tartalmazó tömb. A szöveges megjelenítéshez kell. 28 */ 29 char *honapok[] = {"január", "február", "március", "április", "május" 30 , "június", "július", "augisztus", "szeptember", "október", "november" 31 , "december"}; 32 33 /* 34 * Szövegesen jeleníti meg a dátumot. Pl.: 2007 március 24. 35 */ 36 void datum_szoveggel(int ev, int ho, int nap){ 37 printf("%d %s %d.", ev, honapok[ho-1], nap); 38 } 39 40 /* 41 * A megjelenítési típusokhoz rendelt konstansok. 42 */ 43 enum tipusok {PONTOK, ANGOL, SZOVEGES}; 44 45 /* 46 * A függvény paraméterül kap egy egészet, majd visszaad egy függvénymutatót egy 47 * olyan függvényre, ami void visszatérési típusú, és három int paramétere van. 48 * Az egész alapján dönti el, hogy melyik dátummegjelenítő függvény címét adja 49 * vissza. 50 * A függvény definíciója leegyszerűsíthető, ha definiálunk egy szinonímát a függvény 51 * mutató típusára: 52 * 53 * typedef void (*FGVMUTATO)(int, int, int); 54 * 55 * Ekkor a függvény így nézne ki: 56 * 57 * FGVMUTATO valaszto(int){ 58 * ... 59 * } 60 */ 61 void (*valaszto(int tipus)) (int, int, int){ 62 void (*honapozo)(int, int, int); 63 64 switch(tipus){ 65 case PONTOK: honapozo = datum_pontokkal; 66 break; 67 case ANGOL: honapozo = datum_angolul; 68 break; 69 default: honapozo = datum_szoveggel; 70 break; 71 } 72 73 return honapozo; 74 } 75 76 int main(){ 77 void (*honapozo)(int, int, int) = valaszto(ANGOL); 78 79 honapozo(2007, 1, 10); 80 81 return(EXIT_SUCCESS); 82 } 83 84