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
.