6.  Ukazovatele a funkcie

6.4  Precvičme si

  Porovnajte uvedené funkcie. Čo bude výsledkom volania jednotlivých funkcií pre zodpovedajúce skutočné parametre?

a)b)
void vymena(int a, int b)
{
     int pom = a;
     a = b;
     b = pom;
}
void vymena(int *p_a, int *p_b)
{
     int pom = *p_a;
     *p_a = *p_b;
     *p_b = pom;
}
c)
void vymena(int **pp_a, **pp_a)
{
    int *pom = *pp_a;
    *pp_b = *pp_a;
    *pp_a = *pp_b;	
}
[Riešenie]

problem.gif  Vytvorte program, ktorý pomocou funkcie číta riadok z klávesnice a spočíta koľko v ňom bolo medzier a koľko malých písmen. Okrem toho funkcia vráti hodnotu 0, ak bol riadok prázdny, inak vráti hodnotu 1. O každom neprázdnom riadku vypíšte požadované informácie na obrazovku. Program skončí, ak bol posledný riadok prázdny.


[Riešenie]

  Napíšte niekoľko funkcií typu void: ahoj, cau, nazdar a pod., pričom každá z nich vypíše príslušný pozdrav na obrazovku. V programe deklarujte pole pointerov na funkcie vracajúce void napr. takto:

void (*pozdravy[2])();

Alebo najskôr definujte nový typ - pointer na funkciu vracajúcu void:

typedef void (*TPf)();
TPf pozdravy[2];.

Inicializujte toto trojprvkové pole adresami spomínaných funkcií. Program pozdraví používateľa podľa toho, aký zvyšok po delení tromi dá číslo zadané na vstupe. Nepoužívajte prepínač (switch), využite pole pointerov na funkcie!

[Riešenie]