Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
1
Programování OPERÁTOR SIZEOF, FUNKCE, POLE JAKO PARAMETRY FUNKCÍ ERIK KRÁL
2
Obsah Operátor sizeof Funkce Volání funkce Předávání argumentů hodnotou Pole jako parametr funkce Pole jako návratový typ
3
Operátor sizeof Operátor sizeof zjistí délku typu nebo objektu v bajtech. Používáme ho především u dynamické alokace paměti, kterou probereme později. V této lekci ho využijeme v souvislosti s předáváním pole jako argumentu funkce. int pocet = 0; pocet = sizeof(char); pocet = sizeof(int); pocet = sizeof(float); pocet = sizeof(double); pocet = sizeof(int[4]); char x = 0; int pole[4] = { 0 }; pocet = sizeof(x); pocet = sizeof(pole); Délka typu Délka objektu Otestuje, jaká bude délka pole int a jednoho int
4
Funkce Funkce v C přiřazují složený příkaz k identifikátoru. Funkce mohou přijímat 0 a více parametrů, které se zapisují jako seznam parametrů funkce oddělený, kde každý parametr má typ a identifikátor, případně specifikátor například const. Funkce mohou vracet hodnotu pomocí příkazu return. Typ void znamená, že funkce nevrací žádnou hodnotu. int VratSoucet(int x, int y) { int soucet = x + y; return soucet; } Identifikátor (název funkce) Seznam parametrů Návrat hodnoty
5
Deklarace a definice funkce Deklarace hlavičky funkce a definice těla funkce mohou být uvedeny zvlášť. Deklarace potom bývají typicky v souborech s příponou.h a definice v souborech s příponou.c. int VratSoucet(int, int); int VratSoucet(int x, int y) { int soucet = x + y; return soucet; } Deklarace funkce (hlavička funkce), není nutné uvádět názvy parametrů Definice funkce
6
Volání funkce Funkce se volá pomocí jejího identifikátoru (názvu) a mohou se předávat argumenty. Výsledkem volání funkce je návratová hodnota, kterou můžeme přiřadit pomocí operátoru přiřazení. int VratSoucet(int x, int y) { int soucet = x + y; return soucet; } int main() { int a = 3; int b = 2; int z = VratSoucet(a, b); printf("soucet = %d\n", z); } Volání funkce Návratová hodnota
7
Předávání argumentů hodnotou Při volání funkce se předává hodnota argumentů. Pro parametry funkce se tedy vytvoří nové lokální proměnné, které přestanou existovat po skončení funkce. int VratSoucet(int x, int y) { int soucet = x + y; ++x; y = 10; return soucet; } int main() { int x = 3; int y = 2; int z = VratSoucet(x, y); printf("soucet = %d\n", z); } Proměnné x a y jsou nezávislé na parametrech x a y. Otestuje že jejich změna nemá vliv na hodnotu proměnných ve funkci main().
8
Pole jako parametr funkce Pole se předává funkci jako ukazatel a ztrácí informaci o počtu prvků. int VratPocetBajtu(int pole[3]) { int pocetBajtu = sizeof(pole); return pocetBajtu; } void main() { int pole[3] = { 0 }; int pocetBajtu = 0; pocetBajtu = sizeof(pole); pocetBajtu = VratPocetBajtu(pole); } Protože se pole předává jako ukazatel, tak operátor sizeof vrací jen délku typu int* Otestujte, že se počet bajtů bude lišit.
9
Pole jako parametr funkce Protože se předává ukazatel a ne nezávislá (hluboká) kopie pole, tak je možné ve funkci změnit prvky pole, které je parametrem funkce. #include #define POCET 3 void Napln(int pole[], int pocetPrvku, int hodnota) { for (int i = 0; i < pocetPrvku; i++) { pole[i] = hodnota; } void main() { int pole[POCET] = { 0 }; Napln(pole, POCET, 1); for (int i = 0; i < POCET; i++) { printf("%i ", pole[i]); } I ve funkci Napln měníme hodnotu prvků proměnné pole ve funkci main() protože zapisujeme na stejné místo v paměti.
10
Pole jako návratový typ Pole nemůže být použito jako návratový typ funkce. Místo toho můžeme využít struktury, dynamické alokace paměti a nebo mít pole jako argument funkce a do něj pak zapisovat. char[] VratPrvniZnaky(char pole[], int pocetPrvnich) { } void ZkopirujZnaky(char odkud[], char kam[], int pocetZnaku) { for (int i = 0; i < pocetZnaku; i++) { kam[i] = odkud[i]; } void main() { char text[] = "ahoj jak se mas"; char buffer[4]; ZkopirujZnaky(text, buffer, 4); } Zkopíruje první 4 znaky do pole buffer
11
Pole jako parametr funkce Live coding
12
Děkuji za pozornost Otázky?
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.