Tableau d'entiers

Résolu
anaurel Messages postés 48 Statut Membre -  
Felice_ Messages postés 271 Statut Membre -
Bonjour,

Je voudrais savoir comment renvoyé à laide d'une fonction un tableau d'entiers ou de floats en C
Merci

2 réponses

  1. Felice_ Messages postés 271 Statut Membre 11
     
    Bonjour anaurel,

    En rendant le tableau statique.

    Exemple :
    #include <stdio.h>
    
    int *maFonction() {
        static int tableau[] = {6, 3, 19};
        
        return tableau;
    }
    
    int main(int argc, char *argv[]) {
        int *maFonction();
        
        int *tableau = maFonction();
        
        printf("%d %d %d\n", tableau[0], tableau[1], tableau[2]);
        
        return 0;
    }
    0
    1. anaurel Messages postés 48 Statut Membre
       
      big Boss
      cool ca marche
      une chose: quel est le role de static
      0
      1. Felice_ Messages postés 271 Statut Membre 11 > anaurel Messages postés 48 Statut Membre
         
        Pour faire simple la structure « static » dit simplement que les données de la variable sont gardées en mémoire, jusqu'à la fin du programme.

        Pense à mettre le sujet comme résolu, merci.
        0
  2. Dalfab Messages postés 638 Date d'inscription   Statut Membre Dernière intervention   102
     
    Une fonction ne peut pas retourner un tableau, les contournements sont :
    struct TabArr {
       int arr[10];
    }; // en l'encapsulant dans une structure
    struct TabArr fct1() {
       struct TabArr tab;
       tab.arr[0] = ...;
       return tab; // Le tableau est bien totalement copié
    }
    
    // ou c'est l'appelant qui réserve, la fonction remplit
    void fct2( int arr[] ) {
       arr[0] = ...
    }
    
    // ou la fonction retourne l'adresse d'un tableau statique (devient "non réentrante", la fonction peut difficilement être appelée 2 fois!), et la taille du tableau est "perdue", il faudrait aussi la transmettre...
    int* fct3() {
       static int  arr[10];
       return arr;
    }
    
    // si le tableau est dynamique, la valeur retournée devra être accompagnée de sa taille (il y a donc 2 données à retourner), ET le tableau devra impérativement être détruit, le passage par pointeur est préférable
    void fct4( int**p_arr , unsigned* p_taille ) {
       *p_arr = malloc( 10 * sizeof(**p_arr) );
       *p_taille = 10;
       (*p_arr)[0] = ...
    }
    
    int main() {
       struct TabArr arr1 = fct1();
    
       int arr2[10];     fct2( arr2 );
    
       int* arr3 = fct3(); // mais la rappeler c'est retrouver le même tableau!
       int arr3_[10]; memcpy( arr3 , fct3() , sizeof arr3_ );
    
       int* arr4 =0;     unsigned taille;     fct4( &arr4 , &taille );
       if ( arr4 ) free( arr4 );
    }
    0