Renvoyer tableau

Signaler
Messages postés
2268
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
13 septembre 2013
-
Messages postés
455
Date d'inscription
samedi 26 octobre 2002
Statut
Membre
Dernière intervention
6 avril 2004
-
Hello.

Est-ce qu'une fonction c++ peux renvoyer un tableau?
(C'est pour une dll appellée par un exe en vb)

Merci

coockiesch

6 réponses

Messages postés
455
Date d'inscription
mercredi 6 mars 2002
Statut
Membre
Dernière intervention
18 décembre 2003

salut,

un tableau ? de caractères ou un tableau de type feuille de calcule ?
il faut plus de précision ;-)
Messages postés
2268
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
13 septembre 2013
3
Hello.
Un tableau de doubles.
Messages postés
455
Date d'inscription
samedi 26 octobre 2002
Statut
Membre
Dernière intervention
6 avril 2004
8
réponse courte OUI
réponse : lorsqu' une fonction renvoie un pointeur sur quelque chose, ce quelque chose doit survivre au retour de fonction (et à la perte de la pile correspondante)
Il est courant de passer par de l'allocation dynamique
new/delete

exemple :
#include
using namespace std;

double* f()
{
double* tab = new double[2];
tab[0]=0.;tab[1]=1.;
return tab;
}
int main()
{
double * p = f();
cout << p[0] << " " << p[1] << endl;
delete[]p;//ne pas omettre sous peine de fuite
return 0;
}

on peut aussi demander à la fonction appelante d'allouer la mémoire que la fonction appelée met à jour...
Messages postés
455
Date d'inscription
mercredi 6 mars 2002
Statut
Membre
Dernière intervention
18 décembre 2003

#include
#include <conio.h> // conio.c devc++4

double *calculer(void);

const double EURO = 6.55957;
const int NBRE_MAXI = 15;

double tableau[NBRE_MAXI];

int main(void)
{

double *resultat = new double[NBRE_MAXI];

for (int i = 0; i < NBRE_MAXI; i++) {
resultat = calculer();
cout << i << " = euro(s) " << resultat[i] << endl;
}
delete [] resultat;
getch();
return 0;
} // FIN DE MAIN

double *calculer(void) {

for (int i = 0; i < NBRE_MAXI; i++) {
tableau[i] = EURO * i;
}

return tableau;
} // fin de la fonction calculer
Messages postés
2268
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
13 septembre 2013
3
Merci tous les deux.

coockiesch
Messages postés
455
Date d'inscription
samedi 26 octobre 2002
Statut
Membre
Dernière intervention
6 avril 2004
8
Merci de nous dire merci
Une petite remarque concernant le dernier code de csmarc
Comme le tableau est global, il n'est pas nécessaire de faire de l'allocation dynamique: ni de new[] ni de delete[]
Dans le cas d'un tableau global, il n'est pas besoin de retourner qui que ce soit dans la fonction, il sffit quelle valorise le tableau

Lorsque je proposais que l'appelant alloue lui même la mémoire je pensais plutôt à :

#include
using namespace std;
void f(double* tab, int taille)
{
for (int i=0; i<taille; i++) tab[i] = i;
}

int main()
{
double tabD[2];//allocation automatique
f(tabD, 2 );
cout << tabD[0] << " " << tabD[1] << endl;
return 0;
}
dans ce cas, le tableau ET sa taille est passée à la fonction.
Elle n'a rien à retourner
C'est le plus simple