Punter (programació)

De Viquipèdia
Dreceres ràpides: navegació, cerca
Per a altres significats vegeu «Apuntador».

Un punter o apuntador és una variable manipulable la qual fa referència a una regió de la memòria; així, el programador, en comptes de manipular la variable en sí, treballa amb l'adreça de memòria en la qual la dada es troba emmagatzemada.

Els apuntadors s'utilitzen àmpliament en programació i gairebé tots els llenguatges de programació permeten la seva manipulació. La raó principal de l'existència dels apuntadors o punters resideix en la manipulació de dades situades en la zona de memòria dinàmica o heap (encara que també es poden manipular objectes en la zona estàtica). Les dades poden ser elementals, estructures (struct en C) o objectes que pertanyen a una classe (en llenguatges orientats a objectes). Gràcies a aquesta propietat, els apuntadors permeten modelar un graf, on els elements d'aquest són les dades residents en memòria i les relacions entre els elements són els propis apuntadors. Tot i així, els punters són un gran maldecap per a tots aquells programadors novells i, fins i tot, per als experimentats.

En el cas del llenguatge Java i similars no existeix cap diferenciació entre apuntadors ni variables, ja que qualsevol variable és un apuntador. Això és conseqüència d'una característica particular de Java, on qualsevol dada és un "objecte" que pertany a una classe, i per tant, cada objecte ha de ser instanciat mitjançant la paraula reservada "new" (excepte els tipus de dades elementals, que tot i que segueixen sent objectes, no necessiten ser instanciats amb "new"), i això força l'emmagatzematge d'aquestes dades en la memòria heap.

Exemple[modifica | modifica el codi]

Ús d'apuntadors en una estructura en C:

struct Element { // Exemple d'un node d'una llista doble enllaçada
int dada;
struct Element * següent; // Per a la declaració d'un punter es fa servir *
struct Element * anterior;
};

Per a accedir als atributs com a punters d'una estructura, s'ha d'utilitzar la següent notació: ->. De forma que:

Element *elem; 
Element sig = elem->següent;
A Wikimedia Commons hi ha contingut multimèdia relatiu a: Punter (programació) Modifica l'enllaç a Wikidata