Partage
  • Partager sur Facebook
  • Partager sur Twitter

Question tableau a plusieurs dimensions

Sujet résolu
    15 octobre 2019 à 15:24:33

    Bonjour ! J’espère que vous allez bien ! Pour ma part je me pose quelques questions sur les tableaux a plusieurs dimensions :

    sur tout les tutos que j'ai vu concernant ces tableaux aucun ne met les * au débuts on ne doit plus en mettre du tout ? ex: int *tableau[5]={0};

    j'ai lu sur les cours d'un site qu'on pouvais avoir autant de dimension que l'on voulais mais je ne comprend pas schématiquement comment cela fonctionne ?

    et la dernière ;  peu-t-on mettre un tableau a deux dimensions dans un structure ?

    Merci de m'avoir lu et encore plus de me répondre !  

    voici les differentes sources que j'ai utiliser :https://www.commentcamarche.net/contents/120-langage-c-les-tableaux

    https://www.ltam.lu/cours-c/prg-c67.htm

    • Partager sur Facebook
    • Partager sur Twitter
      15 octobre 2019 à 16:06:21

      Naitchi a écrit:

      sur tout les tutos que j'ai vu concernant ces tableaux aucun ne met les * au débuts on ne doit plus en mettre du tout ? ex: int *tableau[5]={0};

      L'étoile c'est pour accéder à ce que désigne le pointeur. par exemple int *tableau[5]={NULL}; c'est un tableau de 5 pointeurs sur des entiers. Pour avoir un tableau de 5 entiers il faut écrire  int tableau[5]={0};

      Naitchi a écrit:

      j'ai lu sur les cours d'un site qu'on pouvais avoir autant de dimension que l'on voulais mais je ne comprend pas schématiquement comment cela fonctionne ?

      Il n'y a aucune limitation au nombre de dimensions (mais attention ça consomme de la mémoire) par exemple int tab[2][3][4][12][22][40]; est un tableau de 6 dimensions qui consomme 1 MegaOctet et aucune variable locale ne doit être aussi grosse.
      Quand on parle de tableaux à plusieurs dimensions il y 2 formes possibles. Par exemple pour 3 dimensions on peut avoir :
      int  tab1[5][10][4];   // en réalité c'est plutôt un tableau de 5 tableaux de 10 tableaux de 4 tableaux d'entiers.
      int***  tab2;              // en réalité c'est plutôt d'un pointeur sur des pointeurs sur des pointeurs sur des entiers.
      Mais les deux s'utilisent avec la notation : tab[k][j][i] pour accéder à l'élément de position (i,j,k)
      Les 2 sont souvent appelés sous le nom de tableau à plusieurs dimensions, pourtant il ne faut pas les confondre.
      La première forme suppose que l'on connait les dimensions en dur. La seconde nécessite de faire des allocations dynamiques.

      Naitchi a écrit:

      et la dernière ;  peu-t-on mettre un tableau a deux dimensions dans un structure ?

      Oui, on n'a qu'à utiliser une des 2 formes int tab[5][10]; ou bien int* tab;
      • Partager sur Facebook
      • Partager sur Twitter

      En recherche d'emploi.

        15 octobre 2019 à 16:10:20

        Hello,

        •  int *t[5] déclares un tableau de 5 cases de pointeurs sur int. Pas un tableau de 5 int. Il est nécessaire de faire un malloc() de chaque case du tableau avant de pouvoir y mettre quoi que ce soit. Exemple
          #include <stdio.h>
          #include <stdlib.h>
          
          #define ARRAY_SIZE	4
          #define CELL_SIZE	2
          
          int main(void) {
          	int *t[ARRAY_SIZE];
          	
          	for(int i=0;i<ARRAY_SIZE;i++) {
          		t[i]=malloc(sizeof(int)*CELL_SIZE);
          		if(!t[i])
          			return(1);
          		for(int j=0;j<CELL_SIZE;j++)
          			t[i][j]=(i+1)*10+j;
          	}
          	
          	for(int i=0;i<ARRAY_SIZE;puts(""),i++)
          		for(int j=0;j<CELL_SIZE;j++)
          			printf("t[%d][%d]=%3d ",i,j,t[i][j]);
          	
          	for(int i=0;i<ARRAY_SIZE;i++)
          		free(t[i]);
          	
          	return(0);
          }
          Maintenant si tu tiens aux *, tu peux écrire en ligne 20, printf("t[%d][%d]=%3d ",i,j,*(t[i]+j)); ou printf("t[%d][%d]=%3d ",i,j,*(*(t+i)+j));
        • Pour le nombre de dimensions, je pense qu'il y a une limite (à vérifier dans la norme), mais elle est tellement énorme que cela n'a pas d'importance. Perso, je me vois mal utiliser des tableaux de plus de 3 dimensions. Et je n'en ai jamais utilisé.
        • oui, on peut mettre un tableau de n'importe quelle dimension dans une structure, et faire des tableaux de structures de n'importe quelle dimension (incluant des tableaux de n'importe quelle dimension, etc, etc, etc).

        -
        Edité par edgarjacobs 15 octobre 2019 à 16:12:26

        • 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

          15 octobre 2019 à 16:24:54

          Merci j'ai tout compris grâce a vous ! Merci  de m'avoir accorder de votre temps !! et joyeux Halloween !
          • Partager sur Facebook
          • Partager sur Twitter
            15 octobre 2019 à 16:58:36

            Re,

            Pour info: après avoir vérifié dans la norme (c99, 5.2.4.1), le nombre de dimensions est de 12 maximum.

            Edit: c11 également

            -
            Edité par edgarjacobs 15 octobre 2019 à 17:02:57

            • 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

              15 octobre 2019 à 18:51:41

              Bonjour,

              Tu peux regarder le sujet suivant qui parle de tableaux à plusieurs dimensions (ça devrait t'intéresser je pense :)):

              https://openclassrooms.com/forum/sujet/allocation-dynamique-dun-tableau-a-deux-dimensios#93348954

              • Partager sur Facebook
              • Partager sur Twitter

              Mon site web de jeux SDL2 entre autres : https://www.ant01.fr

                15 octobre 2019 à 19:00:40

                Bonjour !

                Warren79 a écrit:

                ça devrait t'intéresser je pense :)

                Effectivement merci :D !
                • Partager sur Facebook
                • Partager sur Twitter
                  15 octobre 2019 à 22:14:47

                  Dalfab a écrit:

                  int  tab1[5][10][4];   // en réalité c'est plutôt un tableau de 5 tableaux de 10 tableaux de 4 tableaux d'entiers.

                  int***  tab2;              // en réalité c'est plutôt d'un pointeur sur des pointeurs sur des pointeurs sur des entiers.

                  Pas tout à fait:

                  int t1[5];        // tableau de 5 int
                  int t2[5][10];    // tableau de 5 tableaux de 10 int
                  int t2[5][10][4]; // tableau de 5 tableaux de 10 tableaux de 4 int
                  int *p1;   // pointeur de int
                  int **p2;  // pointeur de pointeur de int
                  int ***p3; // pointeur de pointeur de pointeur de int

                  Dans le cas des pointeurs, on remarque qu'il n'y a aucun pluriel. Chaque pointeur peut pointer, ou pas, sur un élément de tableau.


                  • Partager sur Facebook
                  • Partager sur Twitter

                  Question tableau a plusieurs dimensions

                  × 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