Partage
  • Partager sur Facebook
  • Partager sur Twitter

Valeur initiale d'une variable apres modification

Langage C

    14 juin 2021 à 6:56:02

    Bonjour a tous.

    Je suis le cours de Programmation C de Mathieu et je suis au niveau des pointeurs, et là j'ai 2 questions:

    La premiere est de savoir si l'appel d'une fonction se fait toujours dans la fonction "main"?

    Et la deuxieme est de savoir si en suivant cet exemple:

    void triplePointeur(int *pointeurSurNombre);
    
    int main(int argc, char *argv[])
    {
        int nombre = 5;
        int *pointeur = &nombre;
    
        triplePointeur(pointeur);
        printf("%d\n", *pointeur);
    
        return 0;
    }
    
    
    void triplePointeur(int *pointeurSurNombre)
    {
        *pointeurSurNombre *= 3;
    }

    , la valeur finale de la variable nombre est 15.

    Si j'ai besoin de faire un autre calcul avec la valeur initiale de nombre qui est 5, comment faire?

    Je vous remercie infiniment d'avance de me faire profiter de vos connaissances

    • Partager sur Facebook
    • Partager sur Twitter
      14 juin 2021 à 8:42:19

      Salut,

      Non, l'appel d'une fonction se fait toujours d'une fonction, mais pas forcément du main().

      Si tu veux garder nombre à sa valeur, il suffit de ne pas la modifier, ça semble idiot mais c'est le meilleur moyen.

      void triplePointeur(int *pointeurSurNombre);
       
      int main(int argc, char *argv[])
      {
          int nombre = 5,
          copieDeNombre = nombre,
          *pointeur = &copieDeNombre;
       
          triplePointeur(pointeur);
          printf("%d\n", *pointeur);
          
          //nombre vaut toujours 5...
          return 0;
      }
       
       
      void triplePointeur(int *pointeurSurNombre)
      {
          *pointeurSurNombre *= 3;
      }

      Bonne continuation.

      • Partager sur Facebook
      • Partager sur Twitter

      Bonhomme !! | Jeu de plateforme : Prototype.

        14 juin 2021 à 16:02:14

        Merci drx pour ta promptitude, j'ai fait des tests et effectivement la valeur de la variable ''nombre'' reste toujours 5.

        Donc si je comprend bien :

        1- tu as crée le pointeur ''*pointeur'' et les variables ''nombre'' et ''copieDeNombre'' sur la même car ils sont de même type

        2- avec les pointeurs on envoie que l'adresse d'une variable a une fonction donc tu as envoyé l'adresse de ''copieDeNombre'', cela permet de modifier directement la valeur de ''copieDeNombre'' tout en conservant la valeur de la variable ''nombre''

        3- dans ton code au niveau du ''printf'', a la ligne 10, est ce possible de mettre ''copieDeNombre'' au lieu de ''*pointeur'' comme ceci?

        void triplePointeur(int *pointeurSurNombre);
          
        int main(int argc, char *argv[])
        {
            int nombre = 5,
            copieDeNombre = nombre,
            *pointeur = &copieDeNombre;
          
            triplePointeur(pointeur);
            printf("%d\n", copieDeNombre);
             
            //nombre vaut toujours 5...
            return 0;
        }
          
          
        void triplePointeur(int *pointeurSurNombre)
        {
            *pointeurSurNombre *= 3;
        }

        Sinon c'est quoi la différence de mettre ''copieDeNombre'' ou ''*pointeur''?

        Merci d'avance.

        • Partager sur Facebook
        • Partager sur Twitter
          14 juin 2021 à 16:16:26

          juniorpaix12 a écrit:

          1- tu as crée le pointeur ''*pointeur'' et les variables ''nombre'' et ''copieDeNombre'' sur la même car ils sont de même type

          Ta phrase est un peu ambigu ! 'sur la même' je dirais sur la même quoi ? Si c'est les virgules qui t'intrigues, la déclaration des variable aurait pu s'écrire :

              int nombre = 5;
              int copieDeNombre = nombre;
              int *pointeur = &copieDeNombre;

          C'est exactement la même chose.

            2) Oui. A savoir qu'on pourait directement envoyer l'adresse de la variable sans créer le pointeur :

          #include <stdio.h>
          
          void triplePointeur(int *pointeurSurNombre);
          
          int main(void)
          {
              int nombre = 5;
              int copieDeNombre = nombre;
          
              triplePointeur(&copieDeNombre);
          
              printf("%d\n", copieDeNombre);
              printf("%d\n", nombre); //nombre vaut toujours 5...
          
              return 0;
          }
          
          void triplePointeur(int *pointeurSurNombre)
          {
              *pointeurSurNombre *= 3;
          }

          juniorpaix12 a écrit:

          3- dans ton code au niveau du ''printf'', a la ligne 10, est ce possible de mettre ''copieDeNombre'' au lieu de ''*pointeur'' comme ceci?

          Oui, tu as essayé et ça a marché. (Je l'ai fait dans le code si dessus).






          • Partager sur Facebook
          • Partager sur Twitter
            14 juin 2021 à 16:46:04

            Merci rouloude, je voulais dire "sur la même ligne"
            • Partager sur Facebook
            • Partager sur Twitter
              15 juin 2021 à 4:37:20

              Je ne sais pas si j'ai bien compris ta question, on peut faire:
                  printf("%d %d\n", *pointeur, copieDeNombre);
              • Partager sur Facebook
              • Partager sur Twitter

              Le Tout est souvent plus grand que la somme de ses parties.

              Valeur initiale d'une variable apres modification

              × 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