Tableau d'entiers

Résolu/Fermé
anaurel Messages postés 38 Date d'inscription vendredi 26 mai 2017 Statut Membre Dernière intervention 12 janvier 2018 - 26 mai 2017 à 23:37
Felice_ Messages postés 265 Date d'inscription mardi 25 avril 2017 Statut Membre Dernière intervention 20 juillet 2017 - 27 mai 2017 à 13:12
Bonjour,

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

2 réponses

Felice_ Messages postés 265 Date d'inscription mardi 25 avril 2017 Statut Membre Dernière intervention 20 juillet 2017 11
27 mai 2017 à 00:46
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;
}
anaurel Messages postés 38 Date d'inscription vendredi 26 mai 2017 Statut Membre Dernière intervention 12 janvier 2018
27 mai 2017 à 12:42
big Boss
cool ca marche
une chose: quel est le role de static
0
Felice_ Messages postés 265 Date d'inscription mardi 25 avril 2017 Statut Membre Dernière intervention 20 juillet 2017 11 > anaurel Messages postés 38 Date d'inscription vendredi 26 mai 2017 Statut Membre Dernière intervention 12 janvier 2018
27 mai 2017 à 13:12
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
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
27 mai 2017 à 10:03
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 );
}