Prohození dvou proměnných
Prohodit hodnoty dvou proměnných je v programování častý úkol, třeba při řazení. V main, bez funkce, to na první pokus vypadá jednoduše:
int a = 3;
int b = 8;
a = b;
b = a;
printf("%d %d\n", a, b);Tento kód vypíše:
8 8Příkaz a = b; přepsal původní hodnotu a, tedy 3, a ta se ztratila. Je to jako prohodit obsah dvou plných sklenic: potřebujete třetí, prázdnou. V programu je touto sklenicí pomocná proměnná, do které si původní hodnotu a nejdřív uložíte:
int a = 3;
int b = 8;
int pomocna = a;
a = b;
b = pomocna;
printf("%d %d\n", a, b);Tento kód vypíše:
8 3Funkce prohod musí změnit dvě proměnné toho, kdo ji volá, a tak budou oba parametry ukazatele: void prohod(int *a, int *b). Uvnitř udělá tytéž tři kroky jako nahoře, jen místo a a b použije *a a *b. Pomocná proměnná pomocna zůstane obyčejný int, protože v ní je hodnota, ne adresa. Při volání předáte dvě adresy: prohod(&x, &y);.
Na co si dát pozor:
- Když hvězdičky zapomenete (
int *pomocna = a; a = b; b = pomocna;), funkce prohodí oba ukazatele, tedy své vlastní kopie adres. Program se přeloží i spustí, ale proměnné vmainzůstanou, jak byly. - Funkce, která už ukazatele má, je předává dál bez
&. Ve funkci s parametryint *aaint *bzavoláteprohod(a, b), protožeaabuž adresy jsou.prohod(&a, &b)skončí chybouincompatible pointer types passing 'int **' to parameter of type 'int *'; remove &.int **je adresa ukazatele, kterou tu nepotřebujete, a hláška radí, co udělat: odstranit&.
Jak psát:
Pokyny
Místo prvního komentáře napište funkci prohod se dvěma parametry typu int *, a a b, která prohodí hodnoty, na které ukazují.
V main místo komentáře mezi prvními dvěma výpisy zavolejte funkci prohod s adresami proměnných prvni a druhy. Program vypíše 3 8 a pod tím 8 3.
Místo druhého komentáře napište funkci serad_dvojici, která také dostane dva ukazatele na int. Když první z nich ukazuje na větší číslo než druhý, zavolá funkci prohod a čísla prohodí. Menší číslo tak bude vždy první. Pak místo posledního komentáře zavolejte serad_dvojici s adresami proměnných x a y. Poslední řádek výpisu bude 4 9.
Začněte programovat zdarma
6/11