Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
1
Současný svět Projekt č. CZ. 2. 17/3. 1
Současný svět Projekt č. CZ.2.17/3.1.00/32038, podpořený Evropským sociálním fondem v rámci Operačního programu Praha adaptabilita Gymnázium prof. Jana Patočky Jindřišská 36 Praha 1 „Praha & EU: Investujeme do vaší budoucnosti“
2
Jazyk C Pointery a funkce
Ve většině programovacích jazyků je možno parametry procedury nebo funkce možno volat dvojím způsobem: hodnotou: jako skutečný parametr se předává hodnota (obsah paměťového místa). To znamená, že uvnitř funkce není možnost toto paměťové místo nijak modifikovat. odkazem: jako skutečný parametr se předává adresa paměťového místa. Uvnitř funkce je možno s tímto paměťovým místem pracovat.
3
Jazyk C Pointery a funkce
nezná procedury, pouze funkce neumožňuje jiné předání parametrů než hodnotou Takže pokud potřebuji předat jako parametr funkce odkaz na paměťové místo (třeba proto, abych mohl s tímto paměťovým místem pracovat ve funkci a výsledek použít i po návratu z funkce), nezbývá než použít pointer.
4
Jazyk C Pointery a funkce
K čemu mi to bude dobré: třeba tam, kde chci, aby funkce vracela více než jednu hodnotu: int pocpol , iprom1 , iprom2 ; char text[20]; pocpol=scanf("%d %d",&iprom1,&iprom2); pocpol=scanf("%s",text); /* nazev pole bez indexu je automaticky pointer, takze nepisu operator reference */ Funkce scanf vrací jako funkční hodnotu počet načtených položek (zde v 1. případě 2, ve druhém 1) a současně do pole text načte znaky z klávesnice. Celé je to tak trochu podvod: ve skutečnosti se do funkce předá hodnota pointeru na proměnnou text. Proměnná text je definovaná v nadřízeném programu, je tedy dostupná i po opuštění funkce. Pointer se v tomto případě po opuštění funkce ztratí.
5
Jazyk C Pointery a funkce
Příklad: funkce, která vymění obsah dvou proměnných void vymen (int *p_x, int *p_y) { int pom; pom = *p_x; *p_x = *p_y; *p_y = pom; } a její volání: int i = 5 , j = 11 ; vymen (&i, &j) ;
6
Jazyk C Pointery a funkce
Pointerů se bohatě využívá například ve funkcích, které pracují se znakovými řetězci; zde je obvykle nutno pracovat uvnitř funkce s více řetězci najednou, takže předání jejich adres pointery je nejlepší řešení. Příklady nejpoužívanějších funkcí pro práci s řetězci: pro správnou funkci je nutno připojit hlavičkový soubor: #include <string.h> - protože jméno znakového řetězce je samo o sobě pointer, není nutno psát při volání funkce referenci “&” Všechny funkce jsou typu „pointer“, tzn. vracejí jako funkční hodnotu pointer na první znak řetězce s1. Příklad volání: char text1[50], text2[50], *p_navr ; p_navr=strcpy(text1,text2) ;
7
Jazyk C Pointery a funkce
Nejpoužívanější znakové funkce: (zde uvedena definice funkčního prototypu): char *strcpy (char *s1 , char *s2) ; kopírování řetězce s2 do s1 char *strcat (char *s1, char *s2) ; spojení řetězců: připojí s2 k s1 char *strchr (char *s1, char c); hledání znaku C v řetězci s1; pokud se najde, vrátí pointer na první výskyt, jinak hodnotu NULL char *strstr (char *s1, char *s2); hledání řetězce s2 v řetězci s1; pokud se najde, vrátí pointer na první výskyt, jinak hodnotu NULL
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.