Diamo un’occhiata a come vengono utilizzati i puntatori nel linguaggio di programmazione C.
Ci occuperemo di due variabili:
aptr
Incontreremo anche due personaggi chiave:
- where would return the address location of variable - where means follow the memory address stored in ptr and set that location to 8
Supponiamo che a si trova all’indirizzo 0x8130 in memoria e ptr a 0x8134; supponi inoltre che si tratti di una macchina a 32 bit tale che un int sia a 32 bit in dimensione. Quanto segue sarà in memoria dopo l’esecuzione del seguente frammento di codice:
int a = 5;int *ptr = NULL;
| Indirizzo | Contenuto |
|---|---|
| 0x8130 | 0x00000005 |
| 0x8134 | 0x00000000 |
(Il puntatore NULL mostrato qui è 0x00000000.) Assegnando l’indirizzo di a a ptr:
ptr = &a;
restituisce i seguenti valori di memoria:
| Indirizzo | Contenuto |
|---|---|
| 0x8130 | 0x00000005 |
| 0x8134 | 0x00008130 |
Quindi, dereferenziando ptr codificando:
*ptr = 8;
il computer prenderà il contenuto di ptr (che è 0x8130), “individuare” quell’indirizzo e assegnare 8 a quella posizione ottenendo la seguente memoria:
| Indirizzo | Contenuto |
|---|---|
| 0x8130 | 0x00000008 |
| 0x8134 | 0x00008130 |
Chiaramente, l’accesso a a restituirà il valore 8 perché l’istruzione precedente ha modificato il contenuto di
tramite il puntatore ptr.