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 :

initialisation de pointeur


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 13
    Par défaut initialisation de pointeur
    Bonjour,

    'aimerais bien savoir pourquoi dans le cas suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int *ptr = 5; /* ptr contient la valeur 5 */
    *ptr = 10;   /* ptr contient toujours 5*/
    merci

  2. #2
    Membre chevronné Avatar de Jenna
    Inscrit en
    Décembre 2009
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2009
    Messages : 272
    Par défaut
    Je suppose que la question qui manque, c'est "Pourquoi cela crash ?".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int *ptr = 5; /* ptr contient la valeur 5 */
    C'est bon, je suppose juste que le compilateur doit émettre un warning ou une erreur, il faudrait caster un peu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int *ptr = (int *)5; /* ptr contient la valeur 5 */
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    *ptr = 10; /* ptr contient toujours 5*/
    Ce code ne fait pas ce que tu penses. Il met à l'adresse pointée par ptr (c'est à dire 5) la valeur 10. Cela ne modifie absolument pas la valeur de ptr, cela modifie la valeur de la mémoire pointée par ptr.

    Par contre, il est fort probable que tu n'as pas le droit d'écrire à cette adresse et cela devrait générer une erreur à l'exécution.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Un exercice de base sur les pointeurs. Si tu comprends ça, tu auras TOUT compris sur les pointeurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int x = 3;
    int * p = &x; /* donc *p == 3, p est un pointeur qui pointe vers l'adresse memore de x */
    *p = 7; /* x == 7 : comprend par là : *p est l'objet qui est pointé par p (donc x) et tu "mets" 7 dans cette case mémoire) */
    A savoir : un pointeur est une variable qui retourne l'adresse mémoire d'une autre variable. Pour connaitre la valeur de cette adresse mémoire, tu fais *p, pour avoir l'adresse de x tu fais &x

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Citation Envoyé par le mauvais Voir le message
    j'aimerais bien savoir pourquoi dans le cas suivant:

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int *ptr = 5; /* ptr contient la valeur 5 */
    *ptr = 10;   /* ptr contient toujours 5*/
    C'est parce que ça correspond à ceci:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int *ptr;
    ptr = 5;
    *ptr = 10;
    Là, on voit mieux la différence.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Problème d'initialisation de pointeur
    Par boubinou dans le forum C
    Réponses: 8
    Dernier message: 16/12/2008, 18h35
  2. initialisation de pointeur
    Par akrlot dans le forum C
    Réponses: 18
    Dernier message: 04/09/2007, 13h50
  3. Initialisation de pointeur
    Par cauriera dans le forum C
    Réponses: 7
    Dernier message: 19/04/2007, 11h47
  4. Réponses: 4
    Dernier message: 08/02/2005, 20h47
  5. Initialisation de pointeurs
    Par Gnux dans le forum C
    Réponses: 5
    Dernier message: 03/10/2003, 17h10

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