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 :

Problème avec pointeur de pointeur.


Sujet :

C

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 141
    Points : 160
    Points
    160
    Par défaut Problème avec pointeur de pointeur.
    Bonjour,
    J'ai écrit ce petit bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    #include <stdio.h>
    int main()
    {
    int x = 10;
    int * px = &x;
    int *ppx = &px;
     
    printf("px: %p -- &x: %p -- ppx: %p -- *ppx: %p\n", px, &x, ppx, *ppx);
     
    return 0;
    }
    les affichages de px, &x, ppx sont ceux que j'attendais, mais pour *ppx je devrais retrouver l'adresse de &x mais ce n'est as le cas.

    De plus à la compilation avec gcc (linux debian )j'ai:

    gcc -Wall pointpoint1.c -o pointpoint1

    pointpoint1.c: In function 'main':
    pointpoint1.c:8: warning: initialization from incompatible pointer type
    pointpoint1.c:10: warning: format '%p' expects type 'void *', but argument 5 has type 'int'

    et ./pointpoint1 donne:

    px: 0x7fff71f28574 -- &x: 0x7fff71f28574 -- ppx: 0x7fff71f28568 -- *ppx: 0x71f28574

    Merci d'avance pour une explication, j'ai vraiment cherché dans toute la FAQ j'ai bien vu des exemples de pointeurs de pointeurs avec les structures
    ça fonctionne mais dans ce cas je ne comprend pas pourquoi ça ne marche pas ?

    rutabagas.

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 946
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 946
    Points : 5 659
    Points
    5 659
    Par défaut
    Kai,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ...
    int * px = &x;
    int *ppx = &px;
     
    printf("px: %p -- &x: %p -- ppx: %p -- *ppx: %p\n", px, &x, ppx, *ppx);
    ppx est un pointeur vers int, et tu lui affectes l'adresse d'un pointeur vers int.

    Ce n'est pas la même chose.

  3. #3
    Membre éclairé Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Points : 771
    Points
    771
    Par défaut
    Attention aux types:
    Citation Envoyé par rutabagas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int x = 10;
    int * px = &x;
    int **ppx = &px;

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 141
    Points : 160
    Points
    160
    Par défaut Re: pointeur de pointeur
    Citation Envoyé par droggo
    Kai,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ...
    int * px = &x;
    int *ppx = &px;
     
    printf("px: %p -- &x: %p -- ppx: %p -- *ppx: %p\n", px, &x, ppx, *ppx);
    ppx est un pointeur vers int, et tu lui affectes l'adresse d'un pointeur vers int.

    Ce n'est pas la même chose.
    Effectivement je m'étais posé la question et en mettant le type "void" j'ai carrément une erreur à la compile. quel type doit-on mettre alors ?
    Merci.

    rutabagas.

  5. #5
    Membre éclairé Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Points : 771
    Points
    771
    Par défaut
    Citation Envoyé par rutabagas
    quel type doit-on mettre alors ?
    La réponse est dans mon post précédent.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 141
    Points : 160
    Points
    160
    Par défaut [Resolut ]Re: pointeur de pointeur
    Citation Envoyé par stephl
    La réponse est dans mon post précédent.
    Merci ça marche maintenant mais je ne comprends pas pourquoi il faut mettre deux étoiles ?

    Merci à tous.

    rutabagas.

  7. #7
    Membre éclairé Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Points : 771
    Points
    771
    Par défaut
    Citation Envoyé par rutabagas
    Merci ça marche maintenant mais je ne comprends pas pourquoi il faut mettre deux étoiles ?
    Parce que c'est un pointeur sur pointeur sur int. Vous pouvez le lire comme cela si ça vous aide (mais les parenthèses sont inutiles):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int *(*pi);
    /*
    pi est un pointeur sur pointeur sur int
    *pi est un pointeur sur int
    **pi est un int
    */

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

Discussions similaires

  1. Pointeurs et pointeurs de pointeurs
    Par wallace27 dans le forum C
    Réponses: 10
    Dernier message: 09/04/2015, 22h07
  2. Réponses: 21
    Dernier message: 06/08/2009, 09h31
  3. Réponses: 6
    Dernier message: 17/07/2008, 18h10
  4. Réponses: 6
    Dernier message: 26/05/2007, 00h33
  5. [TTreeView] Problème avec les pointeurs d'objet
    Par BlackWood dans le forum Composants VCL
    Réponses: 2
    Dernier message: 02/07/2004, 14h31

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