Programovanie v jazyku C++
Dátové typy
Smerníková aritmetika
Pôsobenie aritmetických
operátorov na hodnoty smerníkov je komplexnejšie ako pri obyčajných dátových
typoch, pretože výsledok závisí od typu smerníka a reprezentácie tohoto
typu v pamäti počítača. Napríklad, ak máme smerník typu char a veľkosť
typu char je jeden byte, pri inkrementácii sa zväčší hodnota smerníku o
1. Smerník typu double pri vnútornej reprezentácii typu double v IEEE formáte
pri inkrementácii zväčší svoju hodnotu o 8. Našťastie, za normálnych okolností
sa nemusíme o vnútornú reprezentáciu starať, o správne priradenie hodnoty
sa postarajú operátory.
exam0401.cpp
#include <iostream.h>
void main()
{
char A='a';
char *cp = &A; // vytvori a inicializuje char smernik
double d = 1.119;
double *dp = &d; // vytvori a inicializuje double smernik
char* cp2=cp+1;
double* dp2=dp+1;
cout<<"Scitanie a odcitanie"<<endl;
cout<<" cp = "<<cp<<endl;
cout<<" dp = "<<dp<<endl;
cout<<" cp2 = cp+1 = "<<cp2<<endl;
cout<<" dp2 = dp+1 = "<<dp2<<endl<<endl;
cout<<"Velkost smernika"<<endl;
cout<<" cp2-cp = "<<cp2-cp<<endl;
cout<<" dp2-dp = "<<dp2-dp<<endl<<endl;
cout<<"Velkost miesta v pameti"<<endl;
cout<<" (int)cp2-(int)cp = "<< (int)cp2-(int)cp << endl;
cout<<" (int)dp2-(int)dp = "<< (int)dp2-(int)dp << endl<<endl;
char* cptmp=cp; // odlozena hodnota cp
double* dptmp=dp; // odlozena hodnota dp
cout<<"Inkrement smernika"<<endl;
cp++;
dp++;
cout<<" cp++ "<<cp<<endl;
cout<<" dp++ "<<dp<<endl<<endl;
cout<<"Velkost inkrementu"<<endl;
cout<<" (cp++) - cp = "<<cp-cptmp<<endl;
cout<<" (dp++) - dp = "<<dp-dptmp<<endl;
cp=cptmp; // obnovenie povodnej hodnoty
dp=dptmp;
cout<<"Dekrement smernika"<<endl;
cp--;
dp--;
cout<<" cp-- "<<cp<<endl;
cout<<" dp-- "<<dp<<endl;
cout<<"Velkost dekrementu"<<endl;
cout<<" (cp--) - cp = "<<cp-cptmp<<endl;
cout<<" (dp--) - dp = "<<dp-dptmp<<endl;
}
Kompilátory
na niektorých operačných systémoch majú niekedy problémy s vypisovaním
adresy smerníka, v takomto prípade upravte príklad takto:
cout<<" cp = "<<hex<<(int)cp<<endl;