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.