IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

fonction qui renvoie un tableau


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut fonction qui renvoie un tableau
    bonjour
    J'ai une question qui peut paraitre simple, mais je n'arrive pas a trouver la solution.
    J'aimerais créer une fonction qui renvoie un tableau (de taille donnée):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    char fndkk(void)
    {
    	char c;
    	for(int i=0;i<4;i++){
    		char c[i]=i;
    	}
    	return c;
    	}
    Forcément c'est faux, mais quel serait la bonne déclaration de fndkk?
    (on pourrait utiliser autre chose que les char)
    merci

  2. #2
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    char* fndkk(unsigned int taille)
    {
      char* tab = new char[taille];
      for (unsigned int i = 0; i < taille; ++i)
      {
        tab[i] = i;
      }
      return tab;
    }
    n'oublie pas de faire delete [] tab apres avoir appellé ta fonction

  3. #3
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut
    merci
    corrige moi si je me trompe, mais s'agit il d'un pointeur sur fonction?

    pourquoi mettre le signe & devant la fonction?

  4. #4
    Membre confirmé
    Inscrit en
    Décembre 2004
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 116
    Par défaut
    DKK_API char fndkk(void)
    {
    char c;
    for(int i=0;i<4;i++){
    char c[i]=i;
    }
    return c;
    }

    déjà ton c est un simple caractère pas un tableau,

    alors pour commencer simple :

    DKK_API c'est quoi? des objets?


    pour renvoyer un tableau de caracteres:


    char* fndkk(void)
    {
    char c[4];
    for(int i=0;i<4;i++){
    char c[i]=i;
    }
    return *c;
    }

  5. #5
    Membre confirmé
    Inscrit en
    Décembre 2004
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 116
    Par défaut
    oups pris de vitesse

  6. #6
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    pour le signe & c'est une erreur il n'est pas bon, je l'ai enlevé.

    Ce n'est pas un pointeur vers une fonction mais c'est une fonction qui renvoie un pointeur.

    Et les pointeurs 'sont' des tableaux.

    pour l'utiliser tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    unsigned int taille = 4;
    char* tab = fndk(taille);
     
    delete [] tab;
    sleigh, tu alloues le tableau statiquement, il est detruit a la fin de la fonction et tu renvoies donc un pointeur non valide ! D'ailleurs tu ne renvoie pas le tableau mais la p^remiere valeur du tableau.
    Tu dois faire un new dans ta fonction ou alors tu alloue ton tableau statique avant l'appel et tu passe ton tableau en argument de la fonction et dans ce cas elle ne renvoie rien.

  7. #7
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut
    est t on obligé de faire un new char?
    j'y avais pensé, mais je me suis dit que ce n'etait pas la peine.
    car la déclaration le créerait automatiquement.

  8. #8
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    Si tu veux créer ton tableau à l'intérieur de ta fonction, il faut l'allouer dynamiquement (avec new ou malloc) pour pouvoir l'utiliser une fois sorti de ta fonction.

    Renseigne toi sur les allocations dynamique vs statiques.

    Tu peux ne pas utiliser de new si ton tableau a été déclaré en amont de la fonction, mais dans ce cas il faut le passer en argument. C'est également une pratique courante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    void remplir(char* tab, unsigned int taille)
    {
      for (unsigned int i = 0; i < taille; ++i)
      {
        tab[i] = i;
      }
    }
     
    int main()
    {
      unsigned int taille = 4;
      char tab[taille];
     
      remplir(tab, taille);
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. appel d'une fonction qui renvoie un tableau
    Par yokou dans le forum VB.NET
    Réponses: 1
    Dernier message: 08/01/2008, 21h52
  2. fonction qui renvoie un tableau
    Par GLSpirit dans le forum C++
    Réponses: 9
    Dernier message: 12/05/2007, 14h05
  3. fonction qui renvoie un tableau
    Par toto2022 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 22/01/2007, 16h11
  4. Comment faire une fonction qui renvoi un tableau.
    Par poly128 dans le forum Delphi
    Réponses: 2
    Dernier message: 01/06/2006, 01h04
  5. Fonction qui renvoie un tableau?
    Par elm dans le forum C
    Réponses: 23
    Dernier message: 21/12/2005, 12h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo