Prerequisito: Puntatori in C
Il puntatore a un puntatore in C viene utilizzato quando vogliamo memorizzare l'indirizzo di un altro puntatore. Il primo puntatore viene utilizzato per memorizzare l'indirizzo della variabile. E il secondo puntatore viene utilizzato per memorizzare l'indirizzo del primo puntatore. Ecco perché sono conosciuti anche come doppi puntatori . Possiamo usare un puntatore a un puntatore per modificare i valori dei puntatori normali o creare un array 2D di dimensioni variabili. Un puntatore doppio occupa la stessa quantità di spazio nello stack di memoria di un puntatore normale.
Dichiarazione di puntatore a un puntatore in C
Dichiarare Pointer to Pointer è simile a dichiarare un puntatore in C. La differenza è che dobbiamo inserire un ulteriore '*' prima del nome del puntatore.
char e int java
data_type_of_pointer **name_of_variable = & normal_pointer_variable;>
int val = 5; int *ptr = &val; // storing address of val to pointer ptr. int **d_ptr = &ptr; // pointer to a pointer declared // which is pointing to an integer.>
Il diagramma sopra mostra la rappresentazione in memoria di un puntatore a un puntatore. Il primo puntatore ptr1 memorizza l'indirizzo della variabile e il secondo puntatore ptr2 memorizza l'indirizzo del primo puntatore.
Esempio di doppio puntatore in C
C
// C program to demonstrate pointer to pointer> #include> int> main()> {> >int> var = 789;> >// pointer for var> >int>* ptr2;> >// double pointer for ptr2> >int>** ptr1;> >// storing address of var in ptr2> >ptr2 = &var;> >// Storing address of ptr2 in ptr1> >ptr1 = &ptr2;> >// Displaying value of var using> >// both single and double pointers> >printf>(>'Value of var = %d
'>, var);> >printf>(>'Value of var using single pointer = %d
'>, *ptr2);> >printf>(>'Value of var using double pointer = %d
'>, **ptr1);> >return> 0;> }> |
>
>Produzione
Value of var = 789 Value of var using single pointer = 789 Value of var using double pointer = 789>
Come funziona il doppio puntatore?
conversione da stringa a int in Java
Il funzionamento del doppio puntatore può essere spiegato utilizzando l'immagine sopra:
- Il doppio puntatore viene dichiarato utilizzando la sintassi mostrata sopra.
- Successivamente memorizziamo l'indirizzo di un altro puntatore come valore di questo nuovo doppio puntatore.
- Ora, se vogliamo manipolare o dereferenziare uno qualsiasi dei suoi livelli, dobbiamo utilizzare l'operatore Asterisco (*) il numero di volte in cui vogliamo scendere al livello.
Dimensione del puntatore al puntatore in C
Nel linguaggio di programmazione C, un puntatore doppio si comporta in modo simile a un puntatore normale in C. Pertanto, la dimensione della variabile puntatore doppio è sempre uguale ai puntatori normali. Possiamo verificarlo utilizzando il programma C riportato di seguito.
Esempio 1: programma C per trovare la dimensione di un puntatore a un puntatore.
C
// C program to find the size of pointer to pointer> #include> int> main()> {> >// defining single and double pointers> >int> a = 5;> >int>* ptr = &a;> >int>** d_ptr = &ptr;> >// size of single pointer> >printf>(>' Size of normal Pointer: %d
'>,>sizeof>(ptr));> >// size of double pointer> >printf>(>' Size of Double Pointer: %d
'>,>sizeof>(d_ptr));> >return> 0;> }> |
>
>Produzione
Size of normal Pointer: 8 Size of Double Pointer: 8>
Nota: L'output del codice sopra dipende anche dal tipo di macchina utilizzata. La dimensione di un puntatore non è fissa nel linguaggio di programmazione C e dipende da altri fattori come l'architettura della CPU e il sistema operativo utilizzato. Di solito, per un sistema operativo a 64 bit, la dimensione sarà di 8 byte e per un sistema operativo a 32 bit, la dimensione sarà di 4 byte.
Applicazione dei doppi puntatori in C
Di seguito sono riportati gli usi principali del puntatore a puntatori in C:
- Sono utilizzati nell'allocazione dinamica della memoria di array multidimensionali.
- Possono essere utilizzati per archiviare dati multilivello come paragrafi di documenti di testo, frasi e semantica di parole.
- Vengono utilizzati nelle strutture dati per manipolare direttamente l'indirizzo dei nodi senza copiarli.
- Possono essere utilizzati come argomenti di funzione per manipolare l'indirizzo memorizzato nel puntatore locale.
Puntatori multilivello in C
I doppi puntatori non sono gli unici puntatori multilivello supportati dal linguaggio C. Cosa succede se vogliamo cambiare il valore di un doppio puntatore?
In questo caso, possiamo usare un triplo puntatore, che sarà un puntatore a un puntatore a un puntatore, ovvero int ***t_ptr.
Sintassi del puntatore triplo
pointer_type *** pointer_name;>
Allo stesso modo, per modificare il valore di un puntatore triplo possiamo usare un puntatore a un puntatore a un puntatore a un puntatore a un puntatore a quattro livelli (Four level Pointer). In altre parole possiamo dire che per cambiare il valore di una variabile livello – x possiamo usare un puntatore livello – x+1. E questo concetto può essere ulteriormente esteso.
semplice programma Python
Nota : Possiamo usare qualsiasi puntatore di livello in C. Non c'è alcuna restrizione a riguardo ma rende il programma molto complesso e vulnerabile agli errori.
Devi leggere - Puntatore di funzione in C