Struktury a funkce
Struktura může být parametrem funkce. Místo tří parametrů pro název, cenu a počet dostane funkce jeden produkt:
#include <stdio.h>
typedef struct {
char nazev[20];
double cena;
int pocet;
} Produkt;
double cena_polozky(Produkt polozka) {
return polozka.cena * polozka.pocet;
}
int main(void) {
Produkt mleko = {"Mléko", 24.9, 3};
printf("%s: %.2f\n", mleko.nazev, cena_polozky(mleko));
return 0;
}Program vypíše:
Mléko: 74.70Definice struktury Produkt musí být nad funkcí, protože funkce tento datový typ používá. Proto se struktury obvykle definují úplně nahoře v programu, hned pod #include.
Když zavoláte cena_polozky(mleko), dostane parametr polozka kopii celé struktury: všech jejích členů včetně textu v nazev. Je to stejné jako u parametru typu int a jiné než u pole, které funkce dostane bez kopírování. Když tedy funkce svůj parametr změní, změní jen kopii:
#include <stdio.h>
typedef struct {
char nazev[20];
double cena;
int pocet;
} Produkt;
void prodej_kus(Produkt polozka) {
polozka.pocet--;
printf("Ve funkci: %d\n", polozka.pocet);
}
int main(void) {
Produkt mleko = {"Mléko", 24.9, 3};
prodej_kus(mleko);
printf("V main: %d\n", mleko.pocet);
return 0;
}Program vypíše:
Ve funkci: 2
V main: 3Funkce prodala jedno mléko, ale jen ze své kopie: mleko v main má pořád 3 kusy. V dalším cvičení uvidíte, jak může funkce změnit originál. Funkcím, které strukturu jen čtou, jako cena_polozky, kopie nevadí.
Struktura se zkopíruje i při přiřazení pomocí =. Po Produkt kopie = mleko; má proměnná kopie vlastní název, cenu i počet a změna kopie.pocet proměnnou mleko nezmění. Zkopíruje se i pole nazev, přestože samotné pole přiřadit nejde. Porovnat dvě struktury pomocí == ale nejde: mleko == kopie skončí chybou invalid operands to binary expression ('Produkt' and 'Produkt') (neplatné operandy). Porovnejte místo toho členy, které potřebujete, například mleko.cena == kopie.cena, a názvy pomocí strcmp.
Jak psát:
Pokyny
Místo komentáře napište funkci double plocha(Mistnost mistnost), která vrátí plochu místnosti: její šířku krát délku.
V cyklu vypište u každé místnosti vedle jejího názvu plochu na dvě desetinná místa. Plochu získejte ze své funkce plocha. Program vypíše Kuchyň: 13.50 m2, Ložnice: 14.00 m2 a Chodba: 9.00 m2.
Začněte programovat zdarma
6/9