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;