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 :

appel d'une fonction avec pointeur comme argument


Sujet :

C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 3
    Points : 4
    Points
    4
    Par défaut appel d'une fonction avec pointeur comme argument
    Bonjour,

    je suis debutant en C/C++ mais a la lecture de mon cours, je ne comprends pas pourquoi ce code tout simple (surtout ne vous moquez pas , c pour tester) ne fonctionne pas en envoyant l'adresse du pointeur a l'appel :

    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
    16
    17
    18
    # include <iostream>
     
    int main()
    {
      double val = 2.0 ;
      double *valeur ;
      void donneusedordre(double *parametre) ;
     
      valeur = &val ;
      donneusedordre(&valeur) ;
      std::cout << *valeur << "\n";
    }
     
    //********************************************
    void donneusedordre(double *parametre)
    {
      *parametre=(*parametre)*2 ;
    }
    et qu'il faut envoyer à l'appel de la fonction donneusedordre directement le nom du pointeur "valeur" au lieu de l'adresse :

    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
    16
    17
    18
    # include <iostream>
     
    int main()
    {
      double val = 2.0 ;
      double *valeur ;
      void donneusedordre(double *parametre) ;
     
      valeur = &val ;
      donneusedordre(valeur) ;
      std::cout << *valeur << "\n";
    }
     
    //********************************************
    void donneusedordre(double *parametre)
    {
      *parametre=(*parametre)*2 ;
    }
    Il doit y avoir quelque chose que j'ai mal compris sur les pointeurs

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Bonjour et bienvenu,
    J'aurais une première réponse plutôt brutal : si tu es débutant, alors n'utilise pas les pointeurs
    Mais comme ça ne répond pas à ta question, allons plus loin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    double val = 2.0 ;
    Tu déclare une variable de type double que tu appelles val.
    Pour obtenir sa valeur tu fais :
    Et pour obtenir son adresse tu fais :
    donc val est un double et &val est un pointeur sur double.

    Ensuite :
    Tu déclare une variable de type pointeur sur double que tu appelles valeur
    En reportant ce qu'on a écrit précédemment, valeur est un pointeur sur double et &valeur est un pointeur sur un pointeur sur double.

    Ta fonction donneusedordre prend un paramètre de type : pointeur sur double.
    Donc l'appel doit être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    donneusedordre (&val);
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    donneusedordre(valeur);
    puisque &val et valeur sont de type pointeur sur double.

    Pour finir, les déclaration de fonctions se font plutôt en dehors d'une autre fonction :
    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
    16
    17
    void donneusedordre(double *parametre) ;
    int main()
    {
      double val = 2.0 ;
      double *valeur ;
      
      valeur = &val ;
      donneusedordre(valeur) ;
      std::cout << *valeur << "\n";
    }
     
    //********************************************
    void donneusedordre(double *parametre)
    {
      *parametre=(*parametre)*2 ;
    }
    (Re) Pour finir. Dans ce genre de cas, on préfère largement l'utilisation des références à celles des pointeurs :
    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 donneusedordre(double &parametre) ;
    int main()
    {
      double val = 2.0 ;
     
      donneusedordre(val) ;
      std::cout << val << "\n";
    }
     
    //********************************************
    void donneusedordre(double &parametre)
    {
      parametre=parametre*2 ;
    }
    Enfin, un dernier conseil. Si tu t'appuies sur un livre qui commence l'enseignement du C++ par les pointeurs, alors je te conseille vivement d'en changer. Consultes les tutoriels présents sur le site, ou les conseils de livres.

Discussions similaires

  1. Réponses: 4
    Dernier message: 09/03/2014, 09h38
  2. Réponses: 1
    Dernier message: 12/05/2011, 12h48
  3. appel d'une fonction avec allocation
    Par MoonSef dans le forum C
    Réponses: 9
    Dernier message: 26/02/2007, 08h24
  4. appel d'une fonction avec parametre.
    Par rollernox dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 12/10/2006, 23h07
  5. [FPDF] Erreur après appel d'une fonction avec include
    Par orus8 dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 04/11/2005, 10h49

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