Partage
  • Partager sur Facebook
  • Partager sur Twitter

[QUESTION] portée des variables d'une fonction

...hors de la fonction, j'ai reussi !

Sujet résolu
    18 mai 2007 à 12:30:38

    Bonjour, revoyant le cours sur les pointeurs, je me suis apercu de quelquechose. M@teo ( et bien d'autres, nous tous en fait) prétendons qu'une variable declarée specialement pour une fonction ne peut etre utilisé plus loin dans le code. Pourtant regardez ce code :


    #include <stdlib.h>
    #include <stdio.h>

    void decoupeMinute(long heures, long minutes)
    {
        heures = heures + minutes / 60 ;
        minutes = minutes % 60;

        printf("%ld heures et %ld minutes", heures, minutes);
    }
    int main()
    {
        decoupeMinute(0, 100);
    }


    J'arrive à faire ce que fais m@teo avec les pointeurs, sans utiliser de pointeurs. Ce qui me parait bizzare, c'est que dans mon main(), je n'ai déclarer aucune variable et pourtant j'arrive à en afficher. Serais-je devenu le créateur d'un nouveau style de code ? :p
    • Partager sur Facebook
    • Partager sur Twitter
      18 mai 2007 à 12:37:17

      long heures ,long minutes sont des variables locales , c'est a dire détruit a la fin de la fonction , quand tu fais printf t'est encore dans la fonction .



      Essaye ca :

      #include <stdlib.h>
      #include <stdio.h>

      long *  decoupeMinute(long heures, long minutes)
      {
          heures = heures + minutes / 60 ;
          minutes = minutes % 60;

          printf("%ld heures et %ld minutes\n", heures, minutes);
          return &heures;
      }
      int main()
      {
      long *  a ;
          a = decoupeMinute(0, 100);
          printf("%ld heures\n", *a);

      }


      attention : cette fonction retourne l'adresse d'une variable locale


      Ceci est une bombe a retardement .
      • Partager sur Facebook
      • Partager sur Twitter
        18 mai 2007 à 12:42:18

        Citation


        De nombreux lecteurs m'ont fait remarquer qu'il était possible de résoudre le "problème" sans utiliser de pointeurs. Oui, bien sûr que je sais que c'est possible, mais il faut contourner les règles que nous nous sommes fixées : on peut utiliser des variables globales (bêrk), ou encore faire un printf dans la fonction (alors que c'est dans le main qu'on veut faire le printf !)
        Bref, si vous aussi vous trouvez un moyen de résoudre le problème autrement, vous emballez pas. Ce n'était qu'un exemple un peu "théorique" pour vous montrer l'intérêt des pointeurs. Dans les prochains chapitres cet intérêt vous paraîtra de plus en plus évident ;)

        • Partager sur Facebook
        • Partager sur Twitter
        J'ai déménagé sur Zeste de savoir — Ex-manager des modérateurs.
          18 mai 2007 à 12:43:15

          Surtout, tu met des chiffres directement donc : tu ne donne pas de variables,
          par contre, si tu mettait decoupeMinute(var1, var2); tu devrai mettre des pointeurs...

          Pfranco
          • Partager sur Facebook
          • Partager sur Twitter
            18 mai 2007 à 12:51:38

            Citation : pfranco

            Surtout, tu met des chiffres directement donc : tu ne donne pas de variables,
            par contre, si tu mettait decoupeMinute(var1, var2); tu devrai mettre des pointeurs...

            Pfranco



            Ai - je mis des chiffres ici ?


            #include <stdlib.h>
            #include <stdio.h>

            void decoupeMinute(long heures, long minutes)
            {
                heures = heures + minutes / 60 ;
                minutes = minutes % 60;

                printf("%ld heures et %ld minutes \n", heures, minutes);
            }
            int main()
            {
                long heures=0, minutes=0;
                printf("heures : ");
                scanf("%ld", &heures);
                printf("minutes : ");
                scanf("%ld", &minutes);

                decoupeMinute(heures, minutes);

                system("pause");
            }


            Scriptoff, je n'ai pas la meme chose que toi :


            1 heures et 40 minutes
            1 heures


            Peut etre voulais tu retirer le printf de la fonction ?

            Sinon, je ne savais pas que d'autres personnes avait deja posté un sujet similaire. J'ai compris au moins pourquoi cela se faisait comme ca et qu'il y'aura d'autre exemple plus concret par la suite. Merci.
            • Partager sur Facebook
            • Partager sur Twitter
              18 mai 2007 à 13:08:08

              Deja configure ton compilateur , il te mettras ce warning , effectivement ca marche mais c'est un UB(undefined behavior ) , ca pas ètè prévus par la norme donc ca peut planter a tout moment .
              • Partager sur Facebook
              • Partager sur Twitter

              [QUESTION] portée des variables d'une fonction

              × 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