Partage
  • Partager sur Facebook
  • Partager sur Twitter

tableau et tableau de pointeur initialisation

pointure sur tableau et adress structure

Sujet résolu
    9 décembre 2019 à 16:16:53

    bonjour, voici la problématique, je souhaite crée un tableau de pointeur, qui, va s'initialisé sur un un tableau de type point; point étant ceci, ainsi que le tableau de point

    typedef struct {int x; int y;} point;
    point tp [36] = {
            {3,1}, {3,5}, {4,1}, {5,3}, {6,2}, {3,2},
            {5,2}, {3,4}, {3,3}, {6,1}, {4,4}, {2,2},
            {6,6}, {5,5}, {3,6}, {2,6}, {1,2}, {2,3},
            {6,4}, {5,6}, {4,3}, {4,6}, {2,4}, {1,1},
            {6,5}, {4,5}, {2,1}, {5,4}, {2,5}, {5,1},
            {1,3}, {1,4}, {1,5}, {6,3}, {4,2}, {1,6}
          };

    jusque la aucun souci maintenant je souhaite crée un tableau de pointeur de type point, j'ai donc:

    point* tab_pointeur[36]={};

    et je souhaite créée une fonction, qui prend en argument mon tableau, mon tableau de pointeur, et la taille, avec comme prototype

    void init_pointeur_tab (int t, point *tab, point **tab_p);

    je voudrais déjà voir si je ne trompe pas sur le dernier argument, car on a bien un tableau de pointeur, donc ** ?
    et par la suite, je n'ai pas vraiment d'idée comme expression pour ma boucle for, qui ressemblerais a quelque chose comme ça

    void init_pointeur_tab (int t, point *tab, point **tab_p){
        for (int i=0;i<t;i++){
            *(tab_p+i)=&(tab+i);
        }
    }

    mais j'ai du mal a comprendre comment, mais surtout pourquoi ça fonctionnerais, sachant que j'ai encore du mal avec les pointeurs, si quelqu'un a une idée ?
    PS: 1ere question sur ce forum, je m'excuse par avance si ma question est mal posé, et je suis ouvert au critique constructive !

    -
    Edité par QuentinDoniczka 9 décembre 2019 à 16:23:12

    • Partager sur Facebook
    • Partager sur Twitter
      9 décembre 2019 à 16:45:52

      Si c'est pour initialiser,pendant sa déclaration, un tableau de pointeurs de structures initialisées, on peut faire comme ça

      #include <stdio.h>
      struct point { int x, y; };
      
      
      struct point * tableau_pointeurs[] = {
            & (struct point) {2, 3},
            & (struct point){ 4, 5}
             };
      
      int main()
      {
        printf("hello\n");
        for (int i = 0; i < 2; i++) {
          printf("%d ->  %d, %d\n", 
          i, tableau_pointeurs[i]->x, tableau_pointeurs[i]->y );
        }
        return 0;
      }
      


      Dans ton cas, si je comprends bien tu as un tableau de structures, et tu veux construire un tableau de pointeurs sur ces structures ?

      struct point points[] = { 
        {11, 22},
        {33, 44}
      };
        
      struct point *pointeurs[2];
      
      for (int i = 0; i < 2; i++) {
        pointeurs[i] =  points + i;  // ou &(points[i]);    
      }
      

      Conseil : quand c'est des tableaux, utiliser la notation t[i] plutot que  *(t+i);

      -
      Edité par michelbillaud 9 décembre 2019 à 16:53:08

      • Partager sur Facebook
      • Partager sur Twitter
        9 décembre 2019 à 17:08:54

        avec points[2] du coup mais oui j'ai donc en effet écrit ça
        pointeurs[i] = &(points[i]);

        mais *points + i est c'est bien le contenu de l'adresse i suivante non ? je comprend pas commen,t points + i peu etre égale a &(points[i]); ?
        si je fait *tab+i c'est équivalent a tab[i] non ?

        autant pour moi, dans ton cas il n'y a pas le "*" donc on cible bien l'adresse par "defaut" merci beaucoup !

        -
        Edité par QuentinDoniczka 9 décembre 2019 à 17:20:45

        • Partager sur Facebook
        • Partager sur Twitter
          9 décembre 2019 à 17:24:14

          points+i, c'est pas "l'adresse suivante", c'est la somme de l'adresse du début du tableau points, et de  i*sizeof(struct point).

          La notation t[i] a été introduite dans le le langage C comme abreviation de *(t+i).

          il s'en suit que &t[i]  équivaut à &(*(t+i)), donc t+i.

          relire un cours de C de base, chapitre "arithmétique des pointeurs".

          -
          Edité par michelbillaud 9 décembre 2019 à 17:26:40

          • Partager sur Facebook
          • Partager sur Twitter

          tableau et tableau de pointeur initialisation

          × 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