70 likes | 187 Views
Puntatori - Cenni. Nicola Fanizzi Corso di Programmazione C.d.L. in Informatica DIB - Università degli Studi di Bari. Puntatori. Meccanismo di implementazione del riferimento indiretto ad una risorsa
E N D
Puntatori - Cenni Nicola FanizziCorso di Programmazione C.d.L. in Informatica DIB - Università degli Studi di Bari
Puntatori • Meccanismo di implementazione del riferimento indiretto ad una risorsa • Utili anche come meccanismo esplicito di manipolazione di risorse dinamiche:dimensione/numerosità della/e risorsa/e puntata decisa a run-time puntatore risorsa
PuntatoriDichiarazione Pascal • Tipo puntatore a variabili di tipo base: type. . . <id-tipo> = ^<id-tipo-base> . . . • Variabile di tipo (anonimo) puntatore a variabili di tipo base: var . . . <id-variabile> : ^<id-tipo-base> . . .
PuntatoriUso • accesso indiretto mediante dereferenziazione: uso di p^ per riferirsi alla variabile puntata • assegnazione ad una variabile dello stesso tipo puntatore p1 := p2o del valore speciale puntatore nullo: nil • confrontop1 = p2 (puntano alla stessa variabile ?) • gestione memoria dinamica:procedure predefinite • new(p) allocazione variabili dinamiche di tipo basee puntamento da parte del puntatore p • dispose(p) rilascio memoria allocata dinamicamente puntata da p
PuntatoriRiferimento indiretto a variabili statiche var k: integer; pk: ^integer; begin k := 3; pk := @k; (* dialetti pascal *) write(pk^); (* stampa 3 *) pk^ := pk^ + 5; write(pk^); (* stampa 8 *) end
Puntatori in PascalAllocazione dinamica var p: ^integer; … new(p); p^ := 3; … dispose(p);
program Puntatori; type pcella = ^cella; cella = record num:integer; pun:pcella end; var t,e: pcella; begin {creazione elemento} new(t); t^.num := 1; t^.pun := nil; {inserzione} new(e); e^.num := 2; e^.pun := nil; t^.pun := e; {inserzione in testa} new(e); e^.num := 3; e^.pun := t; t := e; {distruzione di elemento} e := t^.pun^.pun; dispose(t^.pun); t^.pun := e end. Puntatori in PascalAllocazione dinamica - Esempio t (3, ) (1, ) t (2,-) (1,-) t t (3, ) (1, ) (2,-) (2,-)