C/Vettori e puntatori/Puntatori: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
→‎Puntatori a funzioni: aggiunto chiarimento
Pietrodn (discussione | contributi)
indicizzato
Riga 1:
{{Linguaggio C}}
 
{{IndexItem|puntatori}}
 
I '''puntatori''', in C, sono uno strumento molto potente e utile, ma sono anche frequente causa di errori insidiosi.
 
Un puntatore è una variabile che contiene l'{{IndexItem|indirizzo di memoria}}indirizzo di memoria di un'altra {{IndexItem|variabile}}variabile (il puntatore x ''punta'' alla variabile y).
 
==Sintassi==
==={{IndexItem|puntatori, dichiarazione}}Dichiarazione===
Un puntatore si dichiara nel seguente modo:
 
Line 17 ⟶ 19:
Il precedente codice ''non'' genera due puntatori, ma uno solo, <tt>a</tt>. La variabile <tt>b</tt> è semplicemente un intero, perché l'operatore * vale soltanto per una variabile.
 
È possibile creare {{IndexItem|puntatori, array}}array di puntatori:
 
int *a[5];
Line 23 ⟶ 25:
Crea un array di cinque puntatori ad intero. Per maggiori informazioni vedere [[Linguaggio C/Vettori e puntatori/Vettori|la sezione sugli array]].
 
==={{IndexItem|puntatori, assegnamento}}Assegnamento===
Prima di utilizzare un puntatore, bisogna assegnarlo ad un indirizzo di memoria, ovvero fare in modo che esso ''punti'' ad una variabile.
 
int *a;
Line 32 ⟶ 34:
a=&b;
 
Questo codice fa puntare il puntatore <tt>a</tt> alla variabile <tt>b</tt>. È daimportante notare che <tt>a</tt> non contiene il valore 10, ma l'indirizzo di memoria della variabile <tt>b</tt>, ottenuto tramite l'operatore &.
 
È anche possibile fare in modo che un puntatore punti alla stessa variabile puntata da un altro puntatore:
Line 43 ⟶ 45:
c=a; // c punta a b
 
==={{IndexItem|puntatori, accesso}}Accesso===
[[Immagine:Pointers_in_programming_it.svg|thumb|300px|Il puntatore <tt>p</tt> punta alla variabile <tt>a</tt>.]]
Dopo aver dichiarato e assegnato un puntatore ad una variabile, è possibile usarlo.
Line 58 ⟶ 60:
Questo codice stamperà due volte il numero 10.
 
=={{IndexItem|puntatori, aritmetica}}{{IndexItem|aritmetica dei puntatori}}Aritmetica dei puntatori==
È possibile addizionare o sottrarre ad un puntatore un valore intero. Questo farà in modo che il puntatore punti alla cella di memoria immediatamente successiva.
 
Line 72 ⟶ 74:
L'aritmetica dei puntatori permette anche [[Linguaggio C/Vettori e puntatori/Interscambiabilità tra puntatori e vettori|l'interscambiabilità tra puntatori e vettori]].
 
=={{IndexItem|funzioni, puntatori a}}{{IndexItem|puntatori a funzioni}}Puntatori a funzioni==
È possibile far puntare un puntatore ad una funzione, in modo che essa possa essere chiamata attraverso il puntatore. Anche le funzioni, come le variabili, hanno un indirizzo di memoria.
 
Line 93 ⟶ 95:
 
Si noti che il tipo del puntatore "funz" è uguale al tipo dalla funzione "doubleof".
Il tipo di una funzione è costituito dalla sequenza dei tipi dei {{IndexItem|funzioni, parametri}}parametri e dal tipo di ritorno.
Quindi per assegnare un indirizzo di una funzione a un puntatore a funzione è necessario che la funzione e il puntatore abbiano lo stesso numero di parametri, che i parametri corrispondenti abbiano lo stesso tipo, e il tipo di ritorno sia lo stesso.