În C, transmiterea parametrilor la functii se face "prin valoare", singurul rezultat vizibil în exterior fiind valoarea pe care o returneaza functia. Pentru ca o functie sa poata returna mai multe valori sau pentru ca modificarile asupra parametrilor sa se propage în exteriorul functiei, se folosesc pointeri. Acest concept este ilustrat de urmatoarea analogie: Presupunem ca se întâlnesc doua persoane A si B, A poate doar sa vorbeasca, iar B poate doar sa asculte. Cum poate B sa îi transmita informatii lui A ? Simplu: A îi spune: "Lasa raspunsul tau în cutia postala numarul x". Astfel, în momentul când se transmite un pointer catre o functie, functiei i se "comunica" adresa variabilei transmise ca parametru, putând astfel face modificari asupra acelei variabile.
În exemplul urmator se arata cum functia inc_contor va modifica valoarea variabilei contor.
#include <stdio.h> void inc_contor(int *contor_ptr) { (*contor_ptr)++; } void main(void) { int contor = 0; while (contor<10) inc_contor(&contor); printf("contor: %d\n",contor); }Din functia main se transmite spre functia inc_contor nu variabila care trebuie incrementata, ci adresa sa. Functia inc_contor primeste ca parametru nu un întreg, ci un pointer la un întreg. Astfel, cunoscând adresa variabilei contor, functia poate modifica valoarea acelei variabile, referind-o indirect prin intermediul pointerului.