Si parte dal presupposto che una funzione può ritornare un solo valore.
Se abbiamo necessità di ritornare più valori, o comunque di modificarli anche dopo essere stati modificati dalla funzione, dobbiamo ricorrere al passaggio per riferimento.
Se passiamo molti parametri per valore, di questi possiamo ritornarne solo uno con return.
Invece, passando i parametri per riferimento, possiamo farne uscire diversi dalla funzione, grazie ai puntatori.
Quindi se in una funzione i nostri parametri dovranno essere passati per riferimento, nella dichiarazione della funzione, i tipi di dato che ci servono devono essere dichiarati come puntatori.
Esempio:
funzione(int *); // si noti l'asterisco, il parametro passato è un puntatore ad intero.
Un puntatore è definito come un operatore di deferenziazione, ovvero capace di riferirsi ad altre variabili.
I puntatori si dichiarano ponendo * prima del nome.
Per far puntare il puntatore a una variabile, dobbiamo porre il simbolo &.
Ad esempio:
int *p; // abbiamo dichiarato il puntatore
int a;
p=&a; // il puntatore p punta l'indirizzo di a
*p=10; // abbiamo assegnato un valore alla variabile puntata da p. In questo caso a prende 10. Per riferirci alla
variabile puntata quindi dobbiamo anteporre nuovamente il simbolo * al nome del puntatore.