Partage
  • Partager sur Facebook
  • Partager sur Twitter

Tableau de char et pointeur sur char

Sujet résolu
    30 octobre 2019 à 16:02:54

    Bonjour à vous,

    Toujours en train d'essayer de comprendre des notions de base...

    Soit le code suivant :

    int main(int argc, char *argv[])
    {
        char chaine[10] = "Test";
        char *p_tab = chaine;
    
        // Premiere version de boucle
        while(*p_tab != '\0')
        {
            printf("%c [0x%p]\n", *p_tab, p_tab);
            p_tab++;
        }
    
        printf("\n");
    
        p_tab = chaine; // Retour debut de chaine
    
        unsigned int i = 0;
    
        // Deuxieme version de boucle
        while(p_tab[i] != '\0')
        {
            printf("%c [0x%p]\n", p_tab[i], &p_tab[i]);
            i++;
        }
    
        return 0;
    }


    Résultats identiques pour les deux boucles :

    T [0x0061FEFE]
    e [0x0061FEFF]
    s [0x0061FF00]
    t [0x0061FF01]

    T [0x0061FEFE]
    e [0x0061FEFF]
    s [0x0061FF00]
    t [0x0061FF01]

    Question : sachant qu'un pointeur n'est pas un tableau et qu'un tableau n'est pas un pointeur, comment se fait-il que le compilateur ne bronche pas quand on écrit p_tab[i] ?

    Merci pour votre aide :)

    -
    Edité par frankie31 30 octobre 2019 à 16:04:04

    • Partager sur Facebook
    • Partager sur Twitter
      30 octobre 2019 à 16:12:25

      parce que l'écriture p_tab[i] n'est pas spécialement lié aux tableaux.

      p_tab[i]  est équivalent à *(p_tab+i) c'est le déréférencement d'une adresse, ça renvoi ce qui se trouve à l'adresse indiquée après l'opérateur de déréférencement : *

      • Partager sur Facebook
      • Partager sur Twitter
        30 octobre 2019 à 16:32:01

        rouloude a écrit:

        parce que l'écriture p_tab[i] n'est pas spécialement lié aux tableaux.

        p_tab[i]  est équivalent à *(p_tab+i) c'est le déréférencement d'une adresse, ça renvoi ce qui se trouve à l'adresse indiquée après l'opérateur de déréférencement : *

        Je croyais effectivement que cette écriture ne concernait que les tableaux...

        int main(int argc, char *argv[])
        {
            int a = 10;
        
            int *p_a = &a;
        
            printf("p_a[0] = %d\n", *p_a);
            printf("p_a[0] = %d\n", *(p_a + 0));
            printf("p_a[0] = %d\n", p_a[0]);
        
            return 0;
        }


        Ça fonctionne avec une variable "simple"...

        Résultat :

        p_a[0] = 10
        p_a[0] = 10
        p_a[0] = 10

        Merci beaucoup pour ta réponse @+

        • Partager sur Facebook
        • Partager sur Twitter
          30 octobre 2019 à 16:32:53

          Tu aurais même pu écrire  i[p_tab]
          • Partager sur Facebook
          • Partager sur Twitter

          Tableau de char et pointeur sur char

          × 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