Pointerii se declara punând un asterisc (*) în fata numelui variabilei:
int variabila; /*definire variabila intreg*/ int *variabila_ptr; /*definire pointer la un intreg */
Operatorii specifici pointerilor sunt: operatorul de dereferentiere * (pentru un pointer, returneaza entitatea referita de pointer) si operatorul de adresa & (pentru o entitate, returneaza adresa entitatii). Exemplul urmator explica folosirea acestor operatori. Variabila pointer obiect_ptr primeste adresa variabilei obiect, astfel obiect_ptr va indica spre zona de memorie unde este memorata variabila obiect. În ultima linie, se stocheaza valoarea 5 la zona de memorie spre care arata obiect_ptr, adica în variabila obiect.
int obiect; /* variabila de tip intreg */ int * obiect_ptr; /* pointer la un intreg */ obiect=4; obiect_ptr=&obiect; /* obiect_ptr va indica spre obiect */ printf("%d\n", *obiect_ptr); /* afiseaza valoarea spre care indica obiect_ptr */ *obiect_ptr=5; /* atribuie lui obiect valoarea 5 */
Folosirea gresita a operatorilor poate duce la functionari incorecte a programului sau, în cazul fericit, la erori semnalate de compilator:
Mai multi pointeri pot indica spre aceeasi zona de memorie:
int obiect; int *obiect_ptr1; int *obiect_ptr2; obiect = 1; /* se atribuie valoarea 1 lui obiect */ obiect_ptr1 = &obiect; obiect_ptr2 = obiect_ptr1; /* obiect_ptr1 si obiect_ptr2 vor indica spre aceasi locatie de memorie */ printf("%d %d\n", *obiect_ptr1, *obiect_ptr2);
Un pointer special definit în limbajul C este pointerul NULL, care nu indica spre nimic (adresa spre care arata acest pointer este 0). Acest pointer este definit în stdio.h si în stdlib.h ca fiind (void *) 0, adica un pointer spre o locatie de tip void si care arata spre locatia de memorie 0.
O situatie în care pointerii sunt utili este declararea structurilor recursive. În C nu se permite ca o structura sa contina câmpuri de tipul aceleiasi structuri. Aceasta restrictie poate fi evitata folosind pointeri la structuri, dupa cum se arata în exemplul urmator:
typedef struct pers { char nume[20]; int varsta; struct pers * urmator; } persoana; persoana *p;
Pentru a referi un câmp folosind un pointer spre o structura, se foloseste operatorul de dereferentiere: (*p).nume. Echivalent cu acest operator exista în C un alt operator pentru accesarea câmpurilor din structurile indicate de pointeri: p-nume.