I puntatori in C sono facili e divertenti da imparare. Alcune attività di programmazione in C vengono eseguite più facilmente con i puntatori e altre attività, come lallocazione dinamica della memoria, non possono essere eseguite senza utilizzare i puntatori. Quindi diventa necessario imparare i puntatori per diventare un perfetto programmatore C. Cominciamo ad apprenderle in passaggi semplici e facili.
Come sai, ogni variabile è una posizione di memoria e ogni posizione di memoria ha il suo indirizzo definito a cui si può accedere utilizzando la e commerciale (&), che denota un indirizzo in memoria. Considera il seguente esempio, che stampa lindirizzo delle variabili definite –
Quando il codice precedente viene compilato ed eseguito, produce quanto segue risultato –
Address of var1 variable: bff5a400Address of var2 variable: bff5a3f6
Cosa sono i puntatori?
Un puntatore è una variabile il cui valore è lindirizzo di unaltra variabile, cioè lindirizzo diretto della posizione di memoria. Come qualsiasi variabile o costante, devi dichiarare un puntatore prima di utilizzarlo per memorizzare qualsiasi indirizzo di variabile. La forma generale di una dichiarazione di variabile del puntatore è –
type *var-name;
Qui, il tipo è il tipo base del puntatore; deve essere un tipo di dati C valido e var-name è il nome della variabile del puntatore. Lasterisco * utilizzato per dichiarare un puntatore è lo stesso asterisco utilizzato per la moltiplicazione. Tuttavia, in questa istruzione lasterisco viene utilizzato per designare una variabile come puntatore. Dai unocchiata ad alcune delle dichiarazioni di puntatori valide –
int *ip; /* pointer to an integer */double *dp; /* pointer to a double */float *fp; /* pointer to a float */char *ch /* pointer to a character */
Il tipo di dati effettivo del valore di tutti i puntatori, siano essi interi, float, carattere o altro , è lo stesso, un numero esadecimale lungo che rappresenta un indirizzo di memoria. Lunica differenza tra i puntatori di diversi tipi di dati è il tipo di dati della variabile o della costante a cui punta il puntatore.
Come usare i puntatori?
Ci sono alcune operazioni importanti, cosa che faremo molto frequentemente con laiuto dei puntatori. (a) Definiamo una variabile puntatore, (b) assegniamo lindirizzo di una variabile a un puntatore e (c) accediamo infine al valore allindirizzo disponibile nella variabile puntatore. Ciò viene fatto utilizzando loperatore unario * che restituisce il valore della variabile situata allindirizzo specificato dal suo operando. Il seguente esempio fa uso di queste operazioni –
Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato –
Address of var variable: bffd8b3cAddress stored in ip variable: bffd8b3cValue of *ip variable: 20
Puntatori NULL
È sempre una buona pratica assegnare un valore NULL a una variabile puntatore nel caso in cui non si abbia un indirizzo esatto da assegnare. Questo viene fatto al momento della dichiarazione della variabile. Un puntatore a cui è assegnato NULL è detto puntatore nullo.
Il puntatore NULL è una costante con un valore zero definito in diverse librerie standard. Considera il seguente programma:
#include <stdio.h>int main () { int *ptr = NULL; printf("The value of ptr is : %x\n", ptr ); return 0;}
Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato –
The value of ptr is 0
Nella maggior parte dei sistemi operativi, ai programmi non è consentito accedere alla memoria allindirizzo 0 perché tale memoria è riservata dal sistema operativo. Tuttavia, lindirizzo di memoria 0 ha un significato speciale; segnala che il puntatore non è destinato a puntare a una posizione di memoria accessibile. Ma per convenzione, se un puntatore contiene il valore null (zero), si presume che punti a nulla.
Per verificare la presenza di un puntatore nullo, è possibile utilizzare unistruzione “if” come segue:
if(ptr) /* succeeds if p is not null */if(!ptr) /* succeeds if p is null */
Puntatori in dettaglio
I puntatori hanno molti ma semplici concetti e sono molto importanti per la programmazione C. I seguenti importanti concetti relativi ai puntatori dovrebbero essere chiari a qualsiasi programmatore C:
Sr.No. | Concetto & Descrizione |
---|---|
1 | Aritmetica dei puntatori
Ci sono quattro operatori aritmetici che possono essere usati nei puntatori: ++, -, +, – |
2 | Matrice di puntatori
Puoi definire matrici per contenere un numero di puntatori. |
3 | Puntatore al puntatore
C consente di avere un puntatore su un puntatore e così via. |
4 | Passaggio di puntatori a funzioni in C
Passaggio un argomento per riferimento o per indirizzo abilita la modifica dellargomento passato nella funzione chiamante dalla funzione chiamata. |
5 | Return puntatore da funzioni in C
C consente a una funzione di restituire un puntatore alla variabile locale, alla variabile statica e anche alla memoria allocata dinamicamente. |