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 plusieurs paramètres passés par référence. L'usage est de réserver les premiers paramètres d'une fonction pour les arguments de données, passés par valeur, et les derniers paramètres pour les arguments de retour, 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. 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);