Príklady definícii:
int *cislo; -smerník na int (cele) číslo float *cislo; -smerník na float (reálne) číslo
double *cislo; -smerník na double číslo
Príklad 1:
Bez použitia premennej x priamo pri výpočte zvýšte jej hodnotu o 10.
#include<stdio.h>
int main(void)
{
int x = 0 ; //do x sme vložili hodnotu 0
int* smernik; // !!!smerník na int alebo smerník typu int
smernik = &x; // do smerníka sme uložili adresu x
printf("npred pricitanim:x = %d",x);
*smernik = *smernik + 10;
// na adresu ,kde je x ,sme pričítali 10
// * dereferenčný operátor
// & referenčný operátor
printf("npo pricitani: x = %d",x);
getchar();
} Prvé dva riadky by mali byť jasné. Máme premennú typu int, preto potrebujeme vytvoriť smerník typu int.
Pozrime sa bližšie na tretí riadok :
smernik = &x;Znaku & sa hovorí tiež referenčný operátor. Vďaka nemu získame adresu premennej x. Keby sme napísali
smerník = x, tak by sme nezískali veľa. Do smerníka by sme si uložili namiesto adresy hodnotu premennej. V našom prípade by to bola 0. Takže smerník by nám ukazoval na adresu 0 a nie na adresu, kde je uložená hodnota premennej x.Riadok
printf("npred pricitanim:x = %d",x); je snáď jasný.Riadok:
*smernik = *smernik + 10Znaku * sa hovorí tiež dereferenčný operátor. Vďaka tomuto operátoru získame obsah na adrese, na ktorú ukazuje. Využil som to na ľavej strane výrazu:
*smernik = *smernik + 10Vďaka dereferenčnému operátoru vieme tiež zapísať hodnoty na adresu kam ukazuje. Využil som to na pravej strane :
*smernik = *smernik + 10.Riadok
*smernik = *smernik + 10; robí to isté ako x = x + 10;Tieto riadky nestoja za komentár:
printf("npo pricitani: x = %d",x);getchar();Operátor & sa používa pre premenné. Konštanty a výrazy nemajú adresu, preto tento operátor s nimi nemôžme využiť.
Príklad chybných príkazov:
smernik = &10 ; // chyba 10 je konštanta => nemá adresusmernik = &(x + 10) ; // chyba (x+10) je výrazsmernik = 1 ; // už som spomínal, smerník by teraz ukazoval niekam na adresu 1Príklad 2:
#include<stdio.h>
int main(void)
{
int x = 156 ; //do x sme vložili hodnotu 156
int* smernik; // !!!smerník na int alebo typu int
smernik = &(x); // do smerníka sme uložili adresu x
printf("nAdresa kde ukazuje smernik je : %d",smernik);
printf("nAdresa premennej x je : %d",&(x));
printf("nHodnota,ktora je ulozena na adrese,kde ukazuje smernik");
printf(" je : %d",*smernik); printf("nHodnota premennej x je : %d",x );
printf("nnn"); smernik++; //trochu neplechy
x++;
printf("nAdresa kde ukazuje smernik je : %d",smernik);
printf("nAdresa premennej x je : %d",&(x));
printf("nHodnota,ktora je ulozena na adrese,kde ukazuje smernik");
printf(" je : %d", *smernik);
printf("nHodnota premennej x je : %d",x );
getchar();
} Príklad 2 odporúčam pozorne pozrieť, vyskúšať a hlavne poexperimentovať so smerníkmi. Pozorujte, ako sa menia jednotlivé adresy a hodnoty! Je dôležité pochopiť tieto základy, pretože bez nich je cesta ďalej nemožná.
Pre tento diel by to bolo všetko. Nabudúce si ukážeme zložitejší príklad na smerníky (ak nejaký vymyslím). Snáď sa dostanem aj k poliam, keď sa mi to dnes nepodarilo.
Do skompilovania v ďalšej časti!