4. Mám ukazovateľ, čo s ním?
4.1 Referenčný operátor &
Na začiatok príklad:
int i; |
Pre deklarovanú premennú i sa
po spustení programu vyhradí v pamäti potrebný priestor (jeho
veľkosť zodpovedá typu premennej, čiže v prípade int-u zvyčajne
4 bajty). |
i = 308; |
Potom
môžeme do tejto premennej napr. príkazom priradenia uložiť hodnotu.
Pred príkazom priradenia premenná obsahovala pravdepodobne náhodnú
hodnotu! (Len lokálne premenné, ktoré sú v pamäťovej triede static ako aj globálne premenné, sú implicitne inicializované na 0. Ale ani na to sa radšej netreba spoliehať :-) |
Viackrát sme už zdôraznili, že smerník je tiež len
premenná. Deklaráciou dosiahneme iba to, že sa v pamäti počítača
vyhradí miesto potrebné pre uloženie premennej typu ukazovateľ, teda
32 bitov pre "akúsi" adresu. Ale v tejto chvíli je smerník ešte
nepoužiteľný! Ukazuje totiž na náhodné miesto v pamäti, čo neveští
nič dobré. (Neinicializovaná premenná vždy pôsobí podzrivo :-)
int *p;
Jedinou úlohou ukazovateľa je ukazovať na premenné určitého typu. Každá
premenná je v pamäti uložená na nejakej adrese. Ak má teda smerník
ukazovať na túto premennú, musíme poznať jej adresu (resp. táto adresa
musí byť známa). Adresa ľubovoľnej premennej sa dá získať pomocou referenčného (adresového) operátora &.
Je to unárny operátor, má teda len jediný operand a tým je práve
premenná, ktorej adresu požadujeme. Tú môžeme ľahko zistiť nasledovne:
printf("Tato premenna sa nachadza na adrese %p\n", &i);
p = &i; | Príkazom priradenia sme adresu premennej i uložili do premennej p . Môžeme povedať, že pointer p ukazuje na premennú i. |
Adresový
operátor sme aj doteraz bežne používali pri načítavaní hodnôt
premenných zo štandardného vstupu (z klávesnice):
scanf("%d", &i);
Inicializáciu ukazovateľa adresou nejakej premennej môžeme zabezpečiť aj priamo v deklarácii:
int i, *p = &i;
i je premenná typu int, p je ukazovateľ, ktorý ukazuje na túto premennú.
|