Il est souvent contraignant de travailler avec des fonctions qui n'ont, par définition, qu'un seul résultat. On contourne cette contrainte en utilisant des paramètres passés par référence. Par exemple, si l'on demande de calculer les solutions réelles d'une équation du deuxième degré, et le nombre de ces solutions
void trinome(double a, double b, double c,
int *nombre, double *x1, double *x2);
un appel à cette fonction aura la forme suivante :
int n;
double z1, z2;
trinome(3.0, -2.6, 0.5, &n, &z1, &z2);
Notons qu'il est indispensable de définir au préalable des variables n, z1 et z2 qui seront affectées d'une valeur lors de l'appel.
On peut aussi combiner une valeur de retour et des paramètres passés par référence ; la fonction trinome pourrait retourner le nombre de solutions réelles et écrire les solutions dans les arguments passés par référence :
int trinome(double a, double b, double c,
double *x1, double *x2) {
int nombre;
...
return nombre;
}
qui serait alors appelée ainsi :
double z1, z2;
int n = trinome(3.0, -2,6, 0,5, &z1, &z2);