Ukazatel jako parametr funkce
Stručně připomeneme základní vlastnosti funkcí. V jazyce C můžeme z funkce vrátit jen jednu hodnotu a to příkazem return. Parametry uvádíme do závorky za název funkce a jsou předávány hodnotou.
Když potřebujeme z funkce vrátit více výsledků, použijeme ukazatele. Ty uvedeme jako parametry funkce. Do funkce předáváme adresy, funkce potom mění hodnoty přímo na místě, kde je proměnná uložená.
Vše si ukážeme na příkladu funkce pro záměnu hodnot dvou celočíselných proměnných. Do funkce jdou 2 hodnoty, ale z funkce potřebujeme dostat taky 2 hodnoty. Nepotřebujeme ale 4 parametry (2 pro vstup a 2 pro výstup), protože hodnoty, které vstupují do funkce potřebujeme zároveň vrátit z funkce změněné. Použijeme proto ukazatele.
#include <stdio.h> #include <stdlib.h> void zamena(int *x, int *y); //funkce zameni hodnoty 2 promennych int main() { int a,b; printf("\nZadejte dve cisla : "); scanf("%d%d",&a, &b); printf("\nPred zamenou : a = %d b = %d\n", a, b); //funkce ma jako parametry ukazatele, použijeme adresy proměnných zamena(&a, &b); printf("Po zamene : a = %d b = %d\n", a, b); system("pause") ; return 0; } //parametrem jsou ukazatele, protpže potřebujeme "vrátit" 2 hodnoty //nic vic funkce nevraci, je typu void void zamena(int *x, int *y) { int pom; pom = *x; *x = *y; *y = pom; }
Poznámky k programu:
- operátor * má u parametrů funkce stejný význam jako u deklarace ukazatelů. Označuje, že se jedná o ukazatel
- operátor * v těle funkce označuje, že se pracuje s hodnotou, na kterou ukazuje ukazatel
- pokud použijeme ukazatel jako parametr funkce, předáváme vlastně adresu proměnné. Ve funkci potom pracujeme přímo na adrese, kde je hodnota parametru uložená
- při volání funkce musíme použít adresy - v našem případě adresy proměnných a,b, které získáme použitím operátora &
- ve funkci main() používáme ukazatele (adresy) v tomto příkladě jenom jako parametr ve funkci (protože potřebujeme dostat z funkce zpět více než 1 hodnotu). Ostatní proměnné deklarujeme obvyklým způsobem.