Partage
  • Partager sur Facebook
  • Partager sur Twitter

Retourner un tableau

à la fin d'une fonction

Sujet résolu
    28 juillet 2007 à 17:52:06

    Bonjour à tous ! ;)

    J'ai un petit problème : j'aimerais faire une fonction qui prend en paramètre un tableau et qui le modifie. Jusque là je sais faire ! :p
    Mais après, je voudrais renvoyer ce tableau avec un return est c'est là-dessus que je bloque ! :(

    Alors si vous pouviez m'éclairer un peu pour savoir comment faire ... :-°

    Merci d'avance ! ;)
    • Partager sur Facebook
    • Partager sur Twitter
      28 juillet 2007 à 18:07:36

      Pourquoi tu veux retourner le tableau?
      • Partager sur Facebook
      • Partager sur Twitter
        28 juillet 2007 à 18:40:07

        Je me demande aussi.

        Bon, où tu bloques exactement pour retourner ton tableau ? quand tu fais return x; ça marche pas ? Ça compile pas ? ça plante ? Tu sais pas quel type de retour mettre ?
        • Partager sur Facebook
        • Partager sur Twitter
        J'ai déménagé sur Zeste de savoir — Ex-manager des modérateurs.
        Anonyme
          28 juillet 2007 à 18:44:09

          Quand tu envoie un rableau en paramètre, c'est une pointeur sur la première case du tableau que tu envoie.

          Donc pas besoin de retourner ton tableau, tu le modifie dans ta fonction est il restera modifier même à la fin de la fonction.
          • Partager sur Facebook
          • Partager sur Twitter
            28 juillet 2007 à 19:34:54

            J'ai pas essayé car je sais comment on fait ! Je veux juste savoir comment on fait ! :o

            J'ai fait un code (qui marche) où toutes les instructions sont dans le main et pour clarifier un peu le tout je vais faire des fonctions.
            Il y a un endroit dans mon code où je range les valeurs d'un tableau dans l'ordre croissant, et je voudrais que ce soit une fonction qui le fasse. ^^
            Pour cela, il faut bien que je passe ce tableau en paramètre, que je l'ordonne et que je renvois le tableau ordonné avec un return pour qu'il soit utilisable (comme une variable quoi !) ? o_O
            • Partager sur Facebook
            • Partager sur Twitter
              28 juillet 2007 à 19:39:41

              Citation

              (comme une variable quoi !) ? o_O



              Exactement.


              return tontableau;
               


              Il est où le problème ?

              Mais on te rappelle simplement que si tu passes un tableau en paramètre à une fonction et que cette fonction modifie le tableau, alors le tableau original sera lui aussi modifié, contrairement à ce qui se passe avec les variables classiques.
              • Partager sur Facebook
              • Partager sur Twitter
              J'ai déménagé sur Zeste de savoir — Ex-manager des modérateurs.
                28 juillet 2007 à 19:41:40

                Citation : Botman

                Pour cela, il faut bien que je passe ce tableau en paramètre, que je l'ordonne et que je renvois le tableau ordonné avec un return pour qu'il soit utilisable (comme une variable quoi !) ? o_O


                pourquoi ? retourner un tableau (autre qu'une chaine de caractère) qui est passé en paramètre est quasiment inutile.
                void echanger(int t[])
                {
                // inverser les deux premières cases du tableau
                    int a = t[0];
                    t[0] = t[1];
                    t[1] = a;
                }

                // fonction main
                int t_int[] = {10,15,20};
                echanger(t_int)
                // ici "t_int" vaut (15,10,20)
                 
                • Partager sur Facebook
                • Partager sur Twitter
                  28 juillet 2007 à 19:46:26

                  Minirop tu n'as pas compris ce que je voulais je crois ! :p Je ne veux pas inverser les valeurs du tableau mais le modifier dans une fonction et le renvoyer dans le main avec return ! o_O (voir le post de GuilOooo)

                  Merci GuilOooo ! J'ai ma réponse. Finalement c'est comme une variable mais comme je savais pas j'avais pas essayé ! :p Encore merci ! ;)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    28 juillet 2007 à 19:59:57

                    Il essaie de te faire comprendre que tu ne dois pas utiliser return.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      28 juillet 2007 à 20:19:28

                      Botman, l est inutile de retourner le tableau voyons ! Si tu le passes en paramètre de la fonction et que tu le modifies les changements s'appliqueront autant dans le main() que dans ta fonction, ça n'a aucun intérêt de retourner le tableau... Surtout que si c'est un tableau statique que tu transmets à la fonction et que tu OSES écrire ce genre de truc :

                      int tab[5] = {5, 1, 20, 15, 2};
                      tab = fonction(tab);


                      Je t'accrocherai à l'échafaud personnellement ! :D
                      • Partager sur Facebook
                      • Partager sur Twitter
                        28 juillet 2007 à 20:39:16

                        Au fait il y a un moyen simple de passer un tableau par valeur en C (puisque c'est ça qu'il veut faire apparemment) ? Je vois comment faire en assembleur, mais là je n'ai aucune idée.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          28 juillet 2007 à 20:53:24

                          Citation : Botman


                          je voudrais renvoyer ce tableau avec un return est c'est là-dessus que je bloque !



                          Pourtant, c'est bien connu : en C, une fonction peut renvoyer n'importe quoi sauf le type tableau et le type fonction. Donc peine perdue. Si tu veux vraiment retourner un tableau peut-être pourrais-tu encapsuler ce tableau dans une structure ayant pour seul membre ce tableau.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            28 juillet 2007 à 21:31:20

                            <HS>

                            Citation : candide

                            Pourtant, c'est bien connu : en C, une fonction peut renvoyer n'importe quoi sauf le type tableau et le type fonction.



                            Ça pour le retour de fonction, je suis pas complètement d'accord il suffit de ruser un tout petit peu :D :

                            typedef void* (*FUNC)();

                            int fonction(int test, int test1)
                            {
                                return test * test1;
                            }

                            FUNC getFonc(void)
                            {
                                return (void*)fonction;
                            }

                            int main(int argc, char *argv[])
                            {
                                FUNC test;
                                test = getFonc();
                               
                                printf("%d\n", (int) test(5, 7));
                               
                                return 0;
                            }


                            :D

                            Malheureusement ça marche pas avec les valeur flottante. :(

                            </HS>
                            • Partager sur Facebook
                            • Partager sur Twitter
                              28 juillet 2007 à 23:42:52

                              Citation : psychoh13

                              <HS>

                              Citation : candide

                              Pourtant, c'est bien connu : en C, une fonction peut renvoyer n'importe quoi sauf le type tableau et le type fonction.



                              Ça pour le retour de fonction, je suis pas complètement d'accord il suffit de ruser un tout petit peu :D :

                              typedef void* (*FUNC)();

                              FUNC getFonc(void)
                              {
                                  return (void*)fonction;
                              }
                               


                              D'une part, je crois que tu confonds retourner une fonction et retourner un pointeur vers une fonction (il s'agit de deux types différents) et d'autre part ton code donne ceci à la compilation :

                              candide@candide-desktop:~$ gcc -Wall -pedantic -o fonction fonction.c
                              fonction.c: In function ‘getFonc’:
                              fonction.c:12: attention : ISO C interdit la conversion d'un pointeur de fonction en un type pointeur d'objet
                              fonction.c:12: attention : ISO C forbids return between function pointer and ‘void *’


                              Sinon, pour revenir à la question posée :

                              Citation : Kernighan & Ritchie, §A.10.1


                              A function may return an arithmetic type, a structure, a union, a pointer, or void, but not a function or an array.




                              • Partager sur Facebook
                              • Partager sur Twitter
                                29 juillet 2007 à 16:04:43

                                Ben merci pour toutes ces réponses ! En fait je ne comptait pas utiliser ce genre de truc tout de suite c'était juste par simple curiosité ! ^^
                                Merci encore et à bientôt ! ;)
                                • Partager sur Facebook
                                • Partager sur Twitter

                                Retourner un tableau

                                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                • Editeur
                                • Markdown