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 :

Pointeur & Adresse C++


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 12
    Par défaut Pointeur & Adresse C++
    Bonsoir,

    dans ce programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    int * fct();
    void main(void) {
    int *ptr;
     ptr=fct();
     cout << endl << "adresse=" << ptr << endl;
     cout << "valeur=" << *ptr << endl;
     _getch();
    }
    int * fct(){
    int entier=10;
    cout << "adresse=" << &entier << endl;
    cout << "valeur=" << entier << endl;
    return &entier;
    }
    Le resultat me semble etrange, pourquoi la valeur renvoyé est différente? por une meme adresse


    Cdlmt

  2. #2
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Bonjour.

    A la ligne :

    Il y a un warning :

    warning C4172: returning address of local variable or temporary
    En français :

    warning C4172:

    retourne l'adresse d'une variable locale ou temporaire

    Une fonction retourne l'adresse d'une variable locale ou d'un objet temporaire. Les variables locales et objets temporaires sont détruits au retour d'une fonction, donc l'adresse retournée n'est pas valide.

    Revoyez la conception de la fonction afin qu'elle ne retourne pas l'adresse d'un objet local.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 12
    Par défaut
    Merci pour votre réponse

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Au passage, il est important de comprendre que l'utilisation de pointeurs est l'un des domaines les plus complexes du langage. Si bien que, à l'heure actuelle, on essaye de limiter leur utilisation:
    1. aux cas où l'on souhaite maintenir des collections d'objets présentant des comportements polymorphes (et encore, on essayera de se simplifier la vie en utilisant des pointeurs intelligents)
    2. si on ne dispose pas de la possibilité d'utiliser une classe comme boost::optional (bientot : std::optional), pour indiquer qu'une donnée particulière pourrait ne pas exister.

    Il est, bien sur, important de comprendre ce à quoi correspond la notion de pointeur, mais, d'une certaine manière, la seule chose dont tu aies besoin (avant d'atteindre l'étude de l'héritage et du polymorphisme) est qu'un pointeur n'est qu'une valeur numérique entière (généralement non signée) qui représente l'adresse mémoire à laquelle se trouve une donnée du type indiqué et que, bien sur, la valeur représentée ne peut être considérée valide que... tant que la donnée en question continue à exister

    Beaucoup de cours tendent, encore maintenant, à expliquer la problématique liée aux pointeurs beaucoup trop tôt alors que le récipiendaire n'a pas encore eu l'occasion de se dresser une "carte mentale des implications des différents choix du langage" suffisante que pour aborder le problème sans risque. Le fait est que ces cours tendent généralement à suivre une approche "historique" de l'apprentissage du C++ qui considère que l'on apprend d'abord C, puis que l'on fait du C with classes avant d'apprendre réellement le C++.

    Cette approche n'est pas d'avantage adaptée à l'apprentissage du C++ qu'une approche qui considérerait que l'on doit apprendre le latin de Jules Cesar pour apprendre le francais, sous prétexte que le francais "hérite" du latin... Mais bon, d'ici à ce qu'un cours (en francais qui plus est) puisse proposer une approche plus en rapport avec une approche moderne, contente toi surtout de ne pas trop faire attention à tout ce qui a trait à la gestion dynamique de la mémoire, du moins, tant que tu n'aborde pas sérieusement le paradigme orienté objet et les notions d'héritage et de polymorphisme.

    Pour t'éviter à avoir recours à la gestion dynamique de la mémoire, rappelle toi que la SL fournit un tas de possibilités qui prennent cet aspect particulier en charge, et que, si tu veux faire quelque chose de qualité, la connaissance de ces possiblités te sera bien plus utile que celle te permettant de gérer (plus ou moins bien) à la main le nombre de caractères d'une chaine de caractères ou un tableau de ... n'importe quoi
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Membre Expert
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    872
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 872
    Par défaut
    Au passage, il est important de comprendre que l'utilisation de pointeurs est l'un des domaines les plus complexes du langage. Si bien que, à l'heure actuelle, on essaye de limiter leur utilisation:
    Je ne suis pas tout à fait d'accord sur ce point. Ce qui rend le C++ si compliqué est qu'on mélange de l'objet (qui est plutôt haut-niveau) avec des notions bas-niveau issues directement du C. Le C++ a beaucoup de mal à enlever cet héritage, et tant qu'il ne le fera pas, ça restera un gros bordel (ne parlons même pas de sa syntaxe).

    Voilà, c'était juste pour la petite précision !

  6. #6
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Ce n'est pas la POO qui fout la grouille. C'est les exceptions. Elles demandent des précautions particulières quand on gère des ressources -- ou le contraire plutôt. Les pointeurs sont un cas particulier de ressource et contrairement aux idées reçues (parce qu'il y a "C", dans "C++"), on donne une importance plus grande que nécessaire aux pointeurs.

    Bon. Ceci dit, le problème est ici un problème de durée de vie et de compréhension de la différence entre la pile et le tas, et où vivent les variables.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

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

Discussions similaires

  1. Pointeur d'adresse mémoire
    Par LokornTiger dans le forum Débuter
    Réponses: 4
    Dernier message: 27/05/2010, 10h51
  2. Imprimer un pointeur (un adresse)
    Par coolas dans le forum Langage
    Réponses: 4
    Dernier message: 29/04/2008, 11h33
  3. pointeur et adresse
    Par nannouD dans le forum C++
    Réponses: 4
    Dernier message: 11/03/2008, 16h57
  4. Pointeurs et adresses : la question du débutant
    Par zeiht dans le forum C++/CLI
    Réponses: 16
    Dernier message: 26/06/2007, 14h09
  5. [LG]adresse de pointeur
    Par grand's dans le forum Langage
    Réponses: 7
    Dernier message: 29/05/2004, 10h27

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