Partage
  • Partager sur Facebook
  • Partager sur Twitter

Adressage des paramètres formels

Sujet résolu
    20 janvier 2023 à 11:24:15

    Bonjours à toutes et tous :)

    void f_ptr(char *t){
        char **p = &t;
        return;
    }
    int main(){
        char e = 'a';
        f_ptr(&e);
        return 0;
    }

    J'ai une petite question concernant l'adressage du pointeur t dans ce code car lorsque je regarde les adresses j'obtiens ça :

    e = 97			OK
    
    &e = 0000007b5bfffa2d	OK
    
    t =   0000007b5bfffa2d	OK
    
    &t = 0000007b5bfffa2d	NOK
    
    *p = 0000007b5bfffa2d	OK
    
    **p = 97		OK
    
    p =   0000007b5bfffa00	NOK
    
    &p = 0000007b5bfff9e8	OK

    Est ce que quelqu'un aurait plus d'explication sur le faite que l'adresse du pointeur déclaré dans les paramètres formels soit la même que celle de l'objet référencé (un peu comme un tableau) mais que ensuite quand je référence ce pointeur avec un autre pointeur, il me ressort une autre adresse .. ?


    D'avance merci pour vos idées et belle journée !

    • Partager sur Facebook
    • Partager sur Twitter
      20 janvier 2023 à 14:33:23

      Salut,

      On peut savoir comment tu affiches.

      Parce que ca me parait bizarre que l'adresse de t soit sa valeur. C'est p qui devrait contenir l'adresse de t.

      • Partager sur Facebook
      • Partager sur Twitter
        20 janvier 2023 à 14:37:43

        Postes ton code au complet.
        • Partager sur Facebook
        • Partager sur Twitter

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

          20 janvier 2023 à 14:40:14

          Bonjour,

          L'affichage des résultats ne peut pas correspondre au code que tu fournis. Il nous faut le code complet pour le commenter. Deux variables distinctes ne peuvent pas avoir la même adresse au même moment.

          Ici il y a trois variables e t p. Toute variable est quelque part en mémoire et a un contenu et peut avoir une adresse. Donc comme tu l'indiques on a forcément 3 adresses différentes, &e &t et &p sont donc distincts.
          Si on s'intéresse aux contenus on a :
          contenu de e : 'a'
          contenu de t : adresse de e
          contenu de p : adresse de t
          D'où :
          *p  ===  t  === &e
          **p  ===  *t  ===  e  ===  'a'

          -
          Edité par Dalfab 20 janvier 2023 à 14:43:54

          • Partager sur Facebook
          • Partager sur Twitter

          En recherche d'emploi.

            20 janvier 2023 à 15:28:37

            void f_ptr(char *t){
                char **p = &t;
                //printf("t =  %p\n", t);
                //printf("&t = %p\n", &t);
                //printf("*p = %p\n", *p);
                //printf("**p = %d\n", **p);
                //printf("p =  %p\n", p);
                //printf("&p = %p\n", &p);
                return;
            }
            int main(){
                char e = 'a';
                //printf("b = %p\n", e);
                //printf("&b = %p\n", &e);
                f_ptr(&e);
                return 0;
            }

            Re bonjour,

            Effectivement j'avais mal formaté l'affichage de l'adresse *erreur bête* mais je n'avais rien vu et j'ai cherché toute la matinée pourquoi les pointeurs de paramètres formels ont l'adresse de leurs référence mais effectivement , c'est impossible, j'ai pas vu l'illogique la dedans .. :waw:
            J'avais fait ce simple code car il y a des choses que j'ai pas bien compris dans le passage des tableaux en paramètre de fonctions et je voulais revenir aux bases mais je posterais mes questions sur les tableaux dans un autre sujet, merci en tout cas pour vos réponses ça fait plaisir :)

            Et bonne fin journée !

            -
            Edité par GaMMachiPo 20 janvier 2023 à 15:29:49

            • Partager sur Facebook
            • Partager sur Twitter

            Adressage des paramètres formels

            × 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