Partage
  • Partager sur Facebook
  • Partager sur Twitter

Tableaux, adresses et pointeurs

    4 mars 2022 à 21:43:05

    Bonjour, j'étudie actuellement le nouveau cours "Apprenez à programmer en C" de Mathieu Nebra.
    Le soucis est que j'ai beaucoup de mal à assimiler le concept des Tableaux ainsi que leurs pointeurs.

    Voici le code que j'ai préparé afin d'essayer de voir plus clair.

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        int tab[4] = {0};
    
        for (int i = 0 ; i < 4 ; i++)
        {
            printf("Choisissez une valeur pour la case %d du tableau : ", i);
            scanf("%d", (tab + i));
            printf("La valeur de la case %d du tableau est de : %d\n", i, tab[i]);
            printf("L'adresse de la case %d du tableau est : %p\n", i, tab + i);
            printf("L'adresse du pointeur (tab + %d) est : %p\n", i, &tab + i);
            printf("\n");
        }
    
        return 0;
    }

    Voici le résultat que j'obtiens




    La question que je me pose est si un tableau est et ou agit comme un pointeur.

    Pourquoi lorsque j'écris (tab +i) j'obtiens la même adresse que lorsque j'écris (&tab + i) lors du premier passage dans la boucle for ? Les autre cases du tableau me donne pourtant une adresse différente.

    Je me demandais si c'était aussi le même principe lorsque l'on parle de variable struct...

    Merci de votre aide :)

    • Partager sur Facebook
    • Partager sur Twitter
      4 mars 2022 à 22:28:58

      NicolasBoulianne3 a écrit:

      Bonjour, j'étudie actuellement le nouveau cours "Apprenez à programmer en C" de Mathieu Nebra.[...]

      nouveau ?!?!?! hummm … comment dire … choisi un autre cours comme celui sur le site du zeste de savoir. Jette un œil sur le chapitre Les Tableaux en particulier ; tout y est bien mieux expliqué (et cela nous évite à nous participants du forum, d'avoir à réécrire encore et encore les mêmes choses pour pallier ce cours de ǝqnɐp que l'on retrouve ici).
      • Partager sur Facebook
      • Partager sur Twitter
        4 mars 2022 à 22:37:47

        Hello,

        Une autre explication ici

        -
        Edité par edgarjacobs 4 mars 2022 à 22:38:08

        • Partager sur Facebook
        • Partager sur Twitter

        On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

          5 mars 2022 à 6:49:05

          En fait, on peut se poser la question suivante : comme avec deux tableaux on ne peut pas faire t1=t2, les tableaux ne sont pas des variables comme les autres, et d'ailleurs, sont-ce des variables ?

          Si vous regardez la norme du langage C, vous constaterez que

          • "variable" ne fait pas partie des concepts 
          • À la place, on parle d'objets et d'identificateurs.

          Objet, au sens C, c'est un bout de mémoire qui contient une information codée en binaire. 

          Le terme variable apparaît seulement 

          • Comme adjectif dans "variable length array"
          • Dans quelque explications d'exemples, style la variable x de type float prend la valeur 3.14.

          Donc en gros, y a pas de variables, officiellement. Des identificateurs, des objets, et des relations entre eux.

          ---

          Dans les cours de C, on trouve quand même abondamment le mot variable. C'est probablement une transposition par copier coller de ce qui se racontait dans les cours d'autres langages (fortran, pascal, ...)

          L'ennui c'est que la confusion de vocabulaire induit une confusion mentale. Si on parle d'adresse & d'une variable et de tableau qui serait une variable, on se pose la question metaphysique de &tableau. Ou &fonction, plus tard.

          Évidemment, qu'une déclaration de paramètre int t[]  soit équivalente à une déclaration de pointeur, ca n'aide pas à clarifier. 

          ---

          Une structure est aussi un objet, qui a une adresse qu'on peut obtenir par &s, si s est un identificateur qui désigne cet objet.

          Pour une structure, son adresse est "la même" que celle de son premier membre, si ce n'est qu'elle n'a pas le même type. Exemple une structure point p avec des coordonnées x, y, on doit avoir  (void *) &p == (void *) & p.x

          Autrement dit, le premier membre est un objet situé exactement au début de l'objet structure.

          -
          Edité par michelbillaud 5 mars 2022 à 7:07:00

          • Partager sur Facebook
          • Partager sur Twitter

          Tableaux, adresses et pointeurs

          × 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