I puntatori risultano molto utili anche usati con le funzioni in C. Generalmente vengono passati alle funzioni gli argomenti (le variabili) per valore (utilizzando return). Ma questo modo di passare gli argomenti, non modifica gli argomenti stessi e quindi potrebbe risultare limitativo quando, invece, vogliamo che vengano modificate le variabili che passiamo alle funzioni.
Pensiamo ad un caso esemplare, uno su tutti, l'uso della funzione swap (alfa, beta) che scambia il valore di alfa con beta e viceversa; in questo caso il valore restituito dalla funzione (con return) non va minimamente ad intaccare i valori delle variabili alfa e beta, cosa che vogliamo, invece, accada per poter effettivamente fare lo scambio. In questo caso si passano alla funzione, non i valori delle variabili, ma il loro indirizzo, trovandoci, quindi, ad operare con i puntatori a tali valori. Facciamo un esempio pratico per chiarire:
#include <stdio.h>
void swap(int *apt, int *bpt);
int main()
{
int alfa = 5;
int beta = 13;
printf("alfa -> %d, beta -> %dn", alfa, beta);
swap(&alfa, &beta);
printf("alfa -> %d, beta -> %dn", alfa, beta);
}
void swap(int *apt, int *bpt)
{
int temp;
temp = *apt;
*apt = *bpt;
*bpt = temp;
}