Cosa fa ** nella lingua C?

Cosa fa ** nella lingua C?
** indicato come a doppio puntatore Conosciuto anche come puntatore-pointer o doppia indirezione è una funzione di linguaggio C utilizzata per operare su più livelli di memoria contemporaneamente. È utile guardare la struttura di memoria della lingua C per comprendere come funziona.

La memoria in un programma è divisa in due parti: statico e dinamico. La memoria statica si riferisce a variabili di dimensioni fisse nel corso del programma, mentre la memoria dinamica si adatta alla dimensione delle variabili di cui il programma ha bisogno. Ad esempio, se un programma deve archiviare un numero variabile di stringhe, verrà utilizzata la memoria dinamica. In lingua C, Double Pointers (**) vengono utilizzati quando si lavora con la memoria dinamica.

Cos'è un doppio puntatore (**)?

UN doppio puntatore (**) è un puntatore che indica la posizione di un altro puntatore. La posizione della variabile in memoria è indicata da questo puntatore aggiuntivo. Di conseguenza, quando a doppio puntatore (**) è assegnato a una variabile, vengono creati due livelli di indirizzo di memoria. Ciò consente al linguaggio C di accedere alla memoria dinamica più facilmente. Sullo stack di memoria, a doppio puntatore (**) occupa la stessa quantità di spazio di un puntatore normale.

Diamo un'occhiata alla sintassi di a doppio puntatore (**):

data_type_of_pointer ** name_of_variable = & normal_pointer_variable;

Ora diamo un'occhiata a un esempio di utilizzo doppio puntatore (**) in un programma C.

#includere
int main ()

int val = 36;
int* ptr1;
int ** ptr2;
ptr1 = &val;
ptr2 = &ptr1;
printf ("Il valore di val è: %d \ n", val);
printf ("Valore di val usando il singolo puntatore è: %d \ n", *ptr1);
printf ("Valore di val usando il doppio puntatore è: %d \ n", ** ptr2);
restituzione 0;

Stiamo usando la variabile "Val"Con il valore 36 nel codice sopra. Quindi puntiamo un puntatore (PTR1) nella direzione del Val, che è diretto nella direzione di un secondo puntatore (PTR2) dopo. Ma i puntatori non cambiano il valore di 'Val', che rimane 36.

Produzione

Double Pointers (**) Nel linguaggio di programmazione C si comporta in modo identico ai suggerimenti regolari in C. Di conseguenza, il doppio pointer (**) La dimensione della variabile e la dimensione della variabile del puntatore normale sono sempre identiche.

#includere
int main ()

int val = 36;
int* ptr1;
int ** ptr2;
ptr1 = &val;
ptr2 = &ptr1;
printf ("dimensione del puntatore normale: %d \ n", sizeof (ptr1));
printf ("dimensione del doppio puntatore: %d \ n", sizeof (ptr2));
restituzione 0;

Stiamo usando la variabile "Val"Con il valore 36 in questo codice. Quindi puntiamo un puntatore (PTR1) nella direzione del Val, che è diretto nella direzione di un secondo puntatore (PTR2) dopo. Viene calcolata la dimensione di entrambi i puntatori, che è identico, io.e. 8.

Produzione

Cosa fa ** nella lingua C?

Esistono diverse funzioni di Double puntatori che sono menzionati qui:

1: accesso alla memoria dinamica

La caratteristica di Double Pointers (**) è ciò che consente alla lingua C di configurare e accedere alla memoria dinamica. Per fare questo, un puntatore è dotato di un indirizzo che corrisponde al primo elemento di un array. IL doppio puntatore (**) Quindi punta a questo puntatore, consentendo la lettura o la scrittura dei dati in questa posizione. Man mano che il programma funziona, più elementi possono essere aggiunti all'array usando un doppio puntatore (**).

2: Definire un array di punta

Un altro uso per Double Pointers (**) è definire una serie di puntatori. Ciò è utile quando il programma deve accedere a grandi quantità di dati senza preoccuparsi delle dimensioni dell'array. UN doppio puntatore (**) Può accedere rapidamente all'indirizzo di questi puntatori, consentendo al programma di elaborare i dati senza il problema di ridimensionare l'array ogni volta che viene modificato un valore.

3: accesso alla posizione dell'indirizzo di memoria

Al livello più elementare, il doppio puntatore (**) dà semplicemente il programmatore l'accesso all'indirizzo di una determinata posizione di memoria. Con questo indirizzo, il programmatore può quindi accedere a tutti i dati archiviati in quella posizione o modificare tali dati come richiesto. Per fare questo, il programmatore fa semplicemente dereferenze doppio puntatore (**), che viene fatto usando il carattere asterisco (*). A causa del doppio puntatore (**), Il programmatore è ora in grado di accedere e modificare i dati in modi che non erano prima possibile.

4: creare strutture di dati complesse

Inoltre, a doppio puntatore (**) Può anche essere utilizzato per creare strutture di dati più complesse come alberi e grafici. Nodi, che possono indicare uno o più nodi aggiuntivi e costituire una struttura più sofisticata su alberi e grafici. Per creare una struttura così complessa, il programmatore deve di nuovo definire a doppio puntatore (**) Questo indica i nodi nella struttura dei dati. IL doppio puntatore (**) consente al programmatore di accedere e modificare i nodi nella struttura in un modo che non sarebbe possibile senza doppio puntatore (**).

Conclusione

Double Pointers (**) sono una parte potente del linguaggio C, consentendo ai programmi di lavorare con grandi volumi di dati e memoria dinamica. Forniscono l'indirizzo di un pezzo di dati per un facile accesso e mantengono i due livelli di indirizzo durante il passaggio dei dati. Utilizzando Double Pointers (**), Un programma di lingua C può elaborare rapidamente grandi quantità di dati senza la necessità di ridimensionare l'array ogni volta.