50 likes | 154 Views
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 110 00 Praha 1 www.gpjp.cz/projekty/soucasny-svet geu@gpjp.cz www.esfcr.cz
E N D
Současný světProjekt č. CZ.2.17/3.1.00/32038, podpořený Evropským sociálním fondem v rámciOperačního programu Praha adaptabilita Gymnázium prof. Jana Patočky Jindřišská 36 110 00 Praha 1 www.gpjp.cz/projekty/soucasny-svet geu@gpjp.cz www.esfcr.cz „Praha & EU: Investujeme do vaší budoucnosti“
Jazyk CPointery (ukazatelé) Pravidlo: identifikátor proměnné typu pointer bude vždy začínat na p_ a pokračovat jménem proměnné, na kterou ukazuje (abychom se v tom ještě někdy vyznali) Základní operátory pro práci s pointery: & - referenční operátor * - dereferenční operátor Obrázek znamená toto: „na adrese p_i (87) je uložena informace, kde hledat něco dalšího: na adrese 25, kde je uloženo číslo 18“ Pokud se tímto způsobem budete chtít rovnou podívat, kam ukazuje pointer, napíšete *p_i . To znamená: „chci vidět to, co je uloženo na adrese, která je hodnotou pointeru p_i“
Jazyk CPointery (ukazatelé) Je zadáno: int *p_i , i ; /* tzn. obsahem pointeru p_i je adresa proměnné i */ jak to lze naplnit: buď: přímo při definici: int i , *p_i=&i ; /* *p_i zde není dereference, ale definice typu pointer */ nebo nadvakrát: int i , *p_i ; p_i = &i ;
Jazyk CPointery (ukazatelé) Pointer je možno naplnit vlastním přiřazením. Například: p_i = k+1 ; To ale vyžaduje už hodně hlubokou znalost problematiky, v praxi se to moc nepoužívá a pro osoby bez dokonalé znalosti problematiky nedoporučuje. Obvykle se hodnota (alespoň výchozí) pointeru získá referencí z existující proměnné: int i, *p_i ; p_i=&i ; Pak je možno pointer číselně modifikovat: int pole[10], *p_pole ; p_pole=&pole[0] ; Pak *p_pole+3je totéž jakopole[3] Příklad: pointer_pole.c
Jazyk CPointery (ukazatelé) Při definici je nutno dbát na to, aby pointer byl stejného typu jako proměnná, na kterou odkazuje. Jen tak je možno pointery správně modifikovat. Příklad 1: pointer odkazuje naprvní prvek pole typu int: int i, pole[10], *p_pole ; p_pole=&pole[0] ; Příklad 2: pointer odkazuje na začátek znakového řetězce: char pole[10], *p_pole ; p_pole=&pole[0] ; Ukázka v programu: pointer_char.c