Pascal - Pointer to Pointer

Un puntatore a un puntatore è una forma di più riferimenti indiretti o una catena di puntatori. Normalmente, un puntatore contiene l'indirizzo di una variabile. Quando definiamo un puntatore a un puntatore, il primo puntatore contiene l'indirizzo del secondo puntatore, che punta alla posizione che contiene il valore effettivo come mostrato di seguito.

Una variabile che è un puntatore a un puntatore deve essere dichiarata come tale. Per esempio,

type
   iptr = ^integer;
   pointerptr = ^ iptr;

L'esempio seguente illustrerebbe il concetto oltre a visualizzare gli indirizzi:

program exPointertoPointers;
type
   iptr = ^integer;
   pointerptr = ^ iptr;

var
   num: integer;
   ptr: iptr;
   pptr: pointerptr;
   x, y : ^word;

begin
   num := 3000;
   
   (* take the address of var *)
   ptr := @num;
   
   (* take the address of ptr using address of operator @ *)
   pptr := @ptr;
   
   (* let us see the value and the adresses *)
   x:= addr(ptr);
   y := addr(pptr);
   
   writeln('Value of num = ', num );
   writeln('Value available at ptr^ = ', ptr^ );
   writeln('Value available at pptr^^ = ', pptr^^);
   writeln('Address at ptr = ', x^); 
   writeln('Address at pptr = ', y^);
end.

Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:

Value of num = 3000
Value available at ptr^ = 3000
Value available at pptr^^ = 3000
Address at ptr = 45664
Address at pptr = 45680