Svaki podatak u računarskom sistemu ima svoju memorijsku lokaciju. C++ omogučava preko promenljivih određenog tipa pristup podacima, pri čemu nije neophodno da se vodi računa o memorijskoj lokaciji gdegde se podatak nalazi.
Pokazivači su specijalni tipovi podataka koji omogućavaju rad sa memorijskim lokacijama. C++ definiše pokazivače tako što posle tipa pokazivača, ispred naziva stavlja * ( int *pokazivač). Ako želimo da saznamo koja je adresa definisanog pokazivača ispred naziva pokazivača se stavlja & (pr. &pokazivac).
Pr:
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int a = 5;
/* pokayivac ka podatku koji je po tip intedjer*/
int *b;
//b je adresa promenljive a („b pokayuje ka a“)
b = &a;
/*
double *k;
k = &a; //GRESKA: pogresen tip na pokazhuvac (double)
*/
cout << a << endl; //stampa ‘5’ (vrednosta promenljive a)
cout << b << endl; //stampa ‘0x27ff44’ (adresa memorijske lokacije a)
system(„PAUSE“);
return EXIT_SUCCESS;
}
Veoma često, kada se kreiraju pokazivači, potrebno je znati koja je vrednost promenljive ka kojoj pokazuje pokazivač. Sa znakom * pristupamo podatku koji se nalazi na odredjenoj memorijskoj lokaciji. Važno je da se zna da pristupom sa znakom * može vrednost memorijske lokacije da se promeni.
Pr.
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int a = 5; //promenliva ‘a’ ima vrednost 5
int *p; //pokazhuvac ka podatkom od tipa int
p = &a; //p ja adresa a („p pokazuje ka a“)
cout << a << endl; //stampa ‘5’
cout << *p << endl; //stampa ‘5’
*p = 3; //promena vrednosti
cout << p << endl; //stampa adresu
cout << *p << endl; //stampa ‘3’ (vrednost)
cout << a << endl; //stampa ‘3’
system(„PAUSE“);
return EXIT_SUCCESS;
}
Jedan pokazivač može se koristiti više puta pri čemu može da pokazuje i ka različitim promenljivima i memorijskim lokacijama.
Veličina pokazivača zavisi od arhitekturu računarskog sistema, i operativnog sistema, 32 bitni računarski sistem koristi 32 bitne memorijske adrese, veličina pokazivača je 4 bajta.
Pr.
#include <iostream>
using namespace std;
struct typeX
{
int t1, t2, t3, t4;
double t5, t6, t7, t8;
};
int main()
{
int a = 5, b = 2;
double c = 3.8;
char d = ‘Z’;
typeX e;
int *pa = &a, *pb = &b;
double *pc = &c;
char *pd = &d;
typeX *pe = &e;
cout << sizeof(pa) << endl; //stampa ‘4’
cout << sizeof(pb) << endl; //stampa ‘4’
cout << sizeof(pc) << endl; //stampa ‘4’
cout << sizeof(pd) << endl; //stampa ‘4’
cout << sizeof(pe) << endl; //stampa ‘4’
system(„PAUSE“);
return EXIT_SUCCESS;
}
Niz i pokazivači