Pascal offre deux modes de passage des arguments : par valeur, et par référence. Par contre, C, par simplicité n'en offre qu'un, le passage par valeur, tandis que Fortran fait le choix inverse.
Dans un passage par référence , ce n'est pas la valeur de l'argument qui est utilisée dans le corps de la fonction, c'est l'argument lui-même, en tant qu'objet, qui est utilisé et modifié : ces modifications resteront donc visibles après le retour de la fonction.
Pour simuler un appel par référence en C, on utilise un pointeur , type de données qui sera expliqué ultérieurement. Disons qu'en pratique, il suffit de remplacer le paramètre x à faire passer par référence par *x partout dans la définition de la fonction, et l'argument correspondant a par &a à chaque appel de la fonction.
Voici une procédure qui incrémente son argument entier :
void inc(int *x) {
*x = *x+1;
}
int main() {
int n = 4;
inc(&n);
printf("%d\n", n);
}
Un autre exemple classique est la fonction qui échange la valeur de deux variables :
void swap(int *x, int *y) {
int temp = *x;
*x = *y;
*y = temp;
}
Elle sera appelée ainsi :
int a=1, b=2;
swap(&a, &b);
Enfin, si la combinaison des deux règles précédentes produit une expression de la forme *&x, celle-ci peut être simplifiée en x, et &*p en p.