Hledejte v chronologicky řazené databázi studijních materiálů (starší / novější příspěvky).

4. Parametry funkce, funkce vracející hodnotu.

4. Parametry funkce, funkce vracející hodnotu.

Parametry funkce viz otázka č. 1 – Definice funkce
Funkce vracející hodnotu viz otázka č. 1 – Definice funkce a volání funkce

Předávání parametrů funkci:
Předávání hodnotou:
Parametry se pouze zkopírují a s originály nelze ve funkci pracovat.
Nefunkční příklad:
void swap(int a, int b) //Funkce swap má prohodit číslo a s číslem b
{
int c = a;
a = b;
b = c; /*Tady se funkce ukončí, ale hodnoty se prohodí JEN ve funkci, ne ve zbytku programu*/
}

// Volání v programu:
int a = 2, b = 9;
swap(a,b);
//Po provedení funkce se proměnná a == 2 a proměnná b == 9
K prohození nedošlo. K tomuto účelu nelze použít předání hodnotou. Aby bylo možno z funkce vrátit více hodnot je potřeba použít předání odkazem a nebo referencí.
Možné použití předání parametrů hodnotou:
int vypocti(int a, int b)
{
return a*b;
}
// Volání v programu:
int a = 5, vysledek;
vysledek = vypocti(a,6); /*Na rozdíl od předávání odkazem lze použít kromě proměnné i přímou hodnotu*/

Předávání odkazem(viz ukazatele):
Používá se nejčastěji.
void swap(int *a, int *b) //Formální parametry se definují jako ukazatele
{
int c = *a;
*a = *b;
*b = c; //Ve funkci dojde k prohození proměnných
}
// Volání v programu:
int a = 2, b = 9;
swap(&a, &b); /*Funkci se předávají adresy proměnných a, b. Po ukončení funkce skutečně došlo k prohození hodnot těchto dvou proměnných.*/

Předávání referencí:
V některých případech značně zjednodušuje a zpřehledňuje kód programu např. již výše uvedená funkce swap:
void swap(int &a, int &b)
{
int c = a;
a = b;
b = c;
}
// Volání v programu:
int a = 2, b = 9;
swap(a, b);
Předávání referencí je hodně podobné předávání odkazem s tím rozdílem, že v případě reference nelze v průběhu funkce změnit proměnnou na kterou ukazují. Výhodou je možnost pracovat s referencí stejně jako s normální proměnnou.
Při použití u pointerů:
void swap(int *&ukazatel_a, int *&ukazatel_b)
{
int c = *a;
*a = *b;
*b = c;
}
//Volání programu:
int *a,*b,c1 = 2,c2 = 9;
a = &c1;
b = &c2;
swap(*a,*b);
Pozn.: Reference lze použít i jako proměnou v programu(ne pouze k předávání parametrů funkcím).
Příklad:
int a; // Proměnná typu int
int &b = a; /* Reference na proměnnou a, b je nyní jiný název pro číslo, které reprezentuje proměnná a, b je přezdívka proměnné a. */
a++; /* Nyní se změnila hodnota a, i hodnota b. Změnila se vlastně jen jedna hodnota, proměnná a i b reprezentují tutéž proměnnou. */

Žádné komentáře:

Okomentovat