En C, le passage des paramètres se fait toujours par la valeur,
c.-à-d. les fonctions n'obtiennent que les valeurs de
leurs paramètres et n'ont pas d'accès aux variables
elles-mêmes.
Les paramètres d'une fonction sont à considérer comme des variables locales qui sont initialisées automatiquement par les valeurs indiquées lors d'un appel.
A l'intérieur de la fonction, nous pouvons donc changer les valeurs des paramètres sans influencer les valeurs originales dans les fonctions appelantes.
Exemple
La fonction ETOILES dessine une ligne de N étoiles. Le paramètre N est modifié à l'intérieur de la fonction:
void ETOILES(int N) { while (N>0) { printf("*"); N--; } printf("\n"); }
En utilisant N comme compteur, nous n'avons pas besoin de l'indice d'aide I comme dans la fonction LIGNES définie plus haut.
La fonction TRIANGLE, appelle la fonction ETOILES en utilisant la variable L comme paramètre:
void TRIANGLE(void) { int L; for (L=1; L<10; L++) ETOILES(L); }
Au moment de l'appel, la valeur de L est copiée dans N. La variable N peut donc être décrémentée à l'intérieur de ETOILES, sans influencer la valeur originale de L.
Schématiquement, le passage des paramètres peut être représenté dans une 'grille' des valeurs: