Faire renvoyer plusieurs valeurs à une fonction

Problème

Une fonction effectue des calculs et les résultats sont multiples. Vous voulez faire renvoyer ces résultats à la fonction.

Solution

Lorsque le but est de faire renvoyer plusieurs valeurs à une fonction, il n’y a pas d’autre choix que d’utiliser une structure. Par contre, pour des résultats multiples, d’autres moyens de les obtenir consistent à programmer la fonction pour les passer par référence, ou même en l’appelant plusieurs fois afin qu’elle renvoie le résultat suivant.

Discussion

Au sens strict du terme, si une fonction doit renvoyer plusieurs résultats, implémentez une structure dans laquelle vous placez ces résultats. La fonction doit alors allouer l’espace pour la structure, la remplir avec les résultats, puis renvoyer un pointeur dessus. Voici une fonction calculant la division entière de deux nombres et renvoyant le quotient et le reste :


typedef struct 
{ 
  int q; 
  int r; 
} div_t; 
 
div_t * 
div1 (int a, int b) 
{ 
  div_t *result; 
  assert (b != 0); 
  if (NULL == (result = malloc (sizeof *result))) 
    return (NULL); 
  result->q = a / b; 
  result->r = a % b; 
  return (result); 
} 
 
/* ... */ 
 
div_t *r; 
r = div1 (10, 3); 
if (r) 
  { 
    printf ("10 - %d = 3 * %d\n", r->r, r->q); 
    free (r); 
  }
 

Dans certains...

Pour consulter la suite, découvrez le livre suivant :
couv_EI3CACT.png
60-signet.svg
En version papier
20-ecran_lettre.svg
En version numérique
41-logo_abonnement.svg
En illimité avec l'abonnement ENI
130-boutique.svg
Sur la boutique officielle ENI
Précédent
Écrire du code réutilisable
Suivant
Le bon usage des macros