Punter (programació)

De la Viquipèdia, l'enciclopèdia lliure.
Saltar a la navegació Saltar a la cerca

En la programació , els punters són dades de tipus que representen la posició (usant les adreces de memòria ) de l' programa d' elements com les variables , objectes , estructures de dades , subrutines .

Descripció

Tipus de punters

En llenguatges de tipus , cada punter té un tipus ben definit, derivat de l'tipus de l'objecte punxegut. Per tant, es va dir que la direcció de memòria d'una variable de tipus "sencer" a ser de el tipus "punter a sencer", i això va a ser considerat pel llenguatge com un tipus diferent de "punter a caràcter" o altres tipus de punter. El tipus d'objecte apuntat es refereix sovint com el tipus de base de l'punter (amb una terminologia similar a la utilitzada per a arrays ). tipus de punter també es poden utilitzar en la declaració de variables (o en altres contextos similars). Per exemple, en el llenguatge C

 int n ;
 char c ;

declara n com una variable de tipus int (sencer) i c com char (caràcter);

 int * pn;
 char * pc;

declara pn com "punter a l'nombre sencer" i PC com "punter a caràcter". Aquests dos tipus són considerats pel llenguatge com una cosa diferent i (Al menys en principi), incompatible [ no és clar ]; una assignació com

 pc = pn;

serà reportat pel compilador com un error.

punter nul

Cada llenguatge ofereix un valor especial que es pot assignar a una variable de tipus punter per indicar que no apunta a cap objecte. Aquest valor es refereix generalment com NULL (NULL), i sovint es correspon amb el valor "0" (que no sol representar una adreça de memòria vàlida).

punters no vàlids

Per "punter no vàlid" entendrem en general una variable de tipus punter sense inicialitzar, o a què no se li ha assignat la direcció de qualsevol objecte. En funció dels idiomes i contextos, això pot resultar en la variable que conté o bé un valor "a l'atzar" o un valor nul.

Eliminació de referències a un punter "no vàlid" sovint resulta en un error de sistema o de excepció . En el pitjor dels casos (aquell en el qual el punter conté un valor "a l'atzar" que, però, de manera fortuïta, correspon a una posició de memòria), que podrien donar lloc a una violació greu de la coherència interna de la memòria de programa, la impredictible i sovint desastrosa resultats. Per aquesta raó, l'ús incorrecte de punters pot provocar un mal funcionament les causes són molt difícils d'identificar i correcta . Algunes llengües tracten de limitar l'ús de punters o fins i tot eliminar per complet (un exemple d'això és Java ); l'eliminació de punters ha de correspondre generalment a la introducció d'altres mecanismes que permeten obtenir resultats similars a aquells per als que s'utilitzen generalment punters (les limitacions imposades per Java en l'ús de punters, per exemple, són contrarestades per la seva recollida d'escombraries mecanisme) .

Les operacions en els punters

Un exemple gràfic de les operacions d'assignació de punter

L'operació fonamental que pot ser realitzat en un valor de punter de tipus s'anomena eliminació de referències (desreferència) o l'operació de la resolució de referència; que està representat per un operador unitari que, quan s'aplica a un punter, produeix l'objecte assenyalat com a resultat. Per tant, amb referència a l'exemple de la secció anterior,

 * Pn = 3;

( "*" És el símbol de l'operador de desreferència), cessionaris variable "3" per al número sencer apuntat per p n.

Una altra operació força comuna en relació amb punters (no proporcionat per tots els idiomes) permet obtenir un punter a una variable donada, o per calcular la seva direcció; l'operador corresponent (també unari) es refereix sovint com la "direcció d'operador". En C i C ++ aquest operador està representat pel símbol "&":

 pn = & n;

assigna la direcció de n variable a la pn punter. Mentre pn manté aquest valor, qualsevol ús de l'punter sense referència, com ara

 * Pn = 4;

que afectarà la variable n apuntat per p n.

Alguns idiomes (en particular de la C de la família) proporcionen un conjunt addicional d'operacions de tipus punter sobre els valors, especialment dissenyades per a la navegació dins de les matrius ; se'ls coneix com l'aritmètica de punters .

Punters també es poden utilitzar per a les funcions de trucada, en aquest cas se'ls coneix com els punters de funció. Suposem que tenim 2 funcions:

 int f1 (doble);
 int f2 (doble);

a continuació, es pot crear un punter de funció com aquesta:

 int (* pfunz) (doble);

En aquest punt, pot decidir a assenyalar amb el punter pfunz ja sigui a la primera funció f1 o f2 a la segona funció:

 si (condició)
     pfunz = f1;
 en cas contrari
     pfunz = f2;

Per invocar la funció, simplement eliminar la referència a l'punter:

 res int = * pfunz (4,2);

Tot aquest mecanisme és vàlid només si les funcions tenen el mateix tipus de retorn i el mateix nombre de paràmetres de el mateix tipus.

Aplicacions

L'ús de punters és sovint necessari per construir estructures de dades dinàmiques (amb forma i / o variable impredictible en el temps), com ara gràfics , arbres , llistes i així successivament.

Una altra aplicació clàssica dels punters és simular el pas de paràmetres per referència en aquests idiomes que tenen solament el pas de paràmetres per valor .

mecanismes relacionats

  • El C ++ llenguatge proporciona dos constructors de tipus relacionats; el punter en el sentit estricte i la referència , un tipus especial de punter amb desreferenciar implícita.
  • Java proporciona un concepte similar a la d'un punter (també anomenat 1 referència ), amb funcionalitat limitada.

Articles relacionats

Altres projectes

Control de l'autoritat GND (DE) 4.285.887-2