Gymnázium prof. Jana Patočky Jindřišská Praha „Praha & EU: Investujeme do vaší budoucnosti“
Jazyk C Pointery (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) hodnota: 25 symbolická adresa: p_i absolutní adresa: 87 hodnota: 18 symbolická adresa: *p_i absolutní adresa: 25 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 C Pointery (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 C Pointery (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+3 je totéž jako pole[3] Příklad: pointer_pole.c
Jazyk C Pointery (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 na první 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