4. Mám ukazovateľ, čo s ním?

4.6 Pointer na štruktúru, operátor ->

Predpokladajme, že sme napísali nasledujúci kód:

typedef struct {
	char meno[50];
	int vek;
	float plat;
} TOsoba;

TOsoba s;
TOsoba *p = &s;

Definovali sme si nový údajový typ TOsoba – štruktúru (záznam) s tromi prvkami (pole znakov, int a float). Deklarovali sme premenné s  a  p, pričom s je typu TOsoba, p je ukazovateľ na štruktúru typu TOsoba a zároveň sme sme p inicializovali adresou s.

Do štruktúry je potom možno pristupovať
pomocou mena štruktúry s a selektora . s.vek = 22;
pomocou pointeru p zložitejšie (*p).vek = 22;
pomocou pointeru p a operátoru -> jednoducho p->vek = 22;

Príkaz *p.vek = 22; je nesprávny, lebo operátor . (bodka) má vyššiu prioritu ako operátor dereferencie *. V tomto prípade by bol totiž príkaz vyhodnotený ako *(p.vek) = 22; čo znamená: „na adresu, kam ukazuje obsah premennej p.vek, zapíš hodnotu 22.“

Pointery na štruktúry majú (ako uvidíme neskôr) veľký význam predovšetkým pri práci s tzv. dynamickými štruktúrami ako aj pri práci so štruktúrami vo funkciách.