Renvoyer tableau

coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 - 16 janv. 2003 à 21:49
cs_vieuxLion Messages postés 455 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 6 avril 2004 - 17 janv. 2003 à 19:19
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

cmarsc Messages postés 455 Date d'inscription mercredi 6 mars 2002 Statut Membre Dernière intervention 18 décembre 2003
17 janv. 2003 à 07:48
salut,

un tableau ? de caractères ou un tableau de type feuille de calcule ?
il faut plus de précision ;-)
0
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
17 janv. 2003 à 09:34
Hello.
Un tableau de doubles.
0
cs_vieuxLion Messages postés 455 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 6 avril 2004 8
17 janv. 2003 à 11:07
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...
0
cmarsc Messages postés 455 Date d'inscription mercredi 6 mars 2002 Statut Membre Dernière intervention 18 décembre 2003
17 janv. 2003 à 12:07
#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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
17 janv. 2003 à 12:45
Merci tous les deux.

coockiesch
0
cs_vieuxLion Messages postés 455 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 6 avril 2004 8
17 janv. 2003 à 19:19
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
0
Rejoignez-nous