Tableau d'entiers
Résolu
anaurel
Messages postés
48
Statut
Membre
-
Felice_ Messages postés 271 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
Je voudrais savoir comment renvoyé à laide d'une fonction un tableau d'entiers ou de floats en C
Merci
A voir également:
- Tableau d'entiers
- Tableau word - Guide
- Tableau ascii - Guide
- Trier un tableau excel - Guide
- Tableau croisé dynamique - Guide
- Imprimer tableau excel sur une page - Guide
2 réponses
Bonjour anaurel,
En rendant le tableau statique.
Exemple :
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;
}
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 );
}
cool ca marche
une chose: quel est le role de static
Pense à mettre le sujet comme résolu, merci.