Partage
  • Partager sur Facebook
  • Partager sur Twitter

Tableau de pointeurs

    28 juin 2019 à 19:25:24

    Bonjour,

    J'aimerais avoir un tableau nombres de taille 4, de pointeurs de type int dont chaque pointeur pointera sur un autre tableau. Ce deuxième tableau s'appelera par exemple chiffre et il sera de taille 2.

    Je déclare mon tableau de pointeurs de la manière suivante :

    int* nombres[4];

     Ma question est : comment je fais pour accéder à un élément de mon tableau chiffre ? Je pensais tout simplement :

    nombres[2][1]

    Mais ça ne semble pas bien fonctionner ...

    Merci d'avance.

    Laura



    • Partager sur Facebook
    • Partager sur Twitter
      28 juin 2019 à 19:56:57

      Il faut que tu dises sur quoi pointe chaque pointeur et garantir que ce sur quoi tu pointe possède la bonne quantité de mémoire.

      En clair, nombres[2][1] n'existe pas lorsque tu crées le tableau.

      En conséquence, tu dirige ton pointeur sur un éventuel tableau chiffre créé au préalable, ou tu alloues dynamiquement cet emplacement.

      -
      Edité par zoup 28 juin 2019 à 19:58:26

      • Partager sur Facebook
      • Partager sur Twitter
        1 juillet 2019 à 0:13:35

        tableau cree dynamiquement par malloc ?

        ce qui ferait :

        int **nombre;

        nombre = malloc(sizeof(*int) * nombre de tableau de chiffre);

        et cree au fur et a mesure des tableaux de chiffres

        donc a chaque fois qu'il voudras en cree un :

        *nombre = malloc(sizeof(int) * nombre de int dans le tableau chiffre);

        c'est sa ? en plein entrainement donc je demande un peu partout lol @zoup

        -
        Edité par serakoc 1 juillet 2019 à 0:16:33

        • Partager sur Facebook
        • Partager sur Twitter
          1 juillet 2019 à 0:47:39

          Bin justement, on ne sait pas si c'est çà qui est attendu.
          • Partager sur Facebook
          • Partager sur Twitter
            1 juillet 2019 à 11:11:08

            Si tu nous donnes les erreurs qui te sont retournées et le code qui les génère, on pourra t'aider plus précisément.
            • Partager sur Facebook
            • Partager sur Twitter
              2 juillet 2019 à 17:00:22

              tu viens juste de creer un tableau appele "nombre" de 4 pointeurs,

              a partir de ta declaration tu peux donc seulement utiliser les 4 cases du tableau nombre cad :

              nombre[0], nombre[1], nombre[2] et nombre[3]

              je ne comprend pas pourquoi tu utilises nombre[2][1];

              car tu n'assignes aucun tableau ou pointeur a la case numero 3 du tableau;

              a la limite si tu ferais :

              nombre[2] = int tableau[5];

              tu pourras l'utiliser car tu assigne a la case pouvant contenir un pointeur l'adresse a partir du quelle commence le tableau, aisinsi ton programme seras ou chercher.

              de maniere plus simple, avec un tableau fixe pour commencer, tu aurais pu proprement declarer :

              int nombre[4][nombre_de_tableau_que_tu_veux_declarer] = {tu assigne toutes les valeur que tu veux};

              tu aurais ainsi pu utiliser : 

              nombre[2][1] = assigne_ce_que_tu_veux;

              ;;

              pour moi l'utilisation de pointeur ou double pointeur n'est utile qu'avec malloc ou autre assimilé, hors tu ne l'utilise pas (a priori).

              je suis encore debutant donc il est tout a fais possible que jai tout faux donc n'hesiter pas a me taper sur les doigts,

              mais il serait pertinent que tu nous montres ton code :)

              cdlt ,

              n'oubliez pas de vous hydratez

              • Partager sur Facebook
              • Partager sur Twitter
                3 juillet 2019 à 11:19:57

                Un exemple

                #include <stdio.h>
                
                int main()
                {
                	// voici notre tableau de pointeurs, on l'appelle tableau,
                	// parce que chaque élément est un tableau
                	int* tableau[4];
                	
                	// faisons pointer chaque élément vers quelque chose
                        // (un tableau, l'eussiez-vous cru ?)
                	
                	int t0[] = { 11, 22};
                	tableau[0] = t0;
                	
                	// ..
                	
                	// et voyons voir 
                	for (int i = 0; i < 2; i++) {
                		printf("%d -> %d\n", i, tableau[0][i]);
                	}
                	
                	return 0;
                }
                

                Pas besoin d'allocation dynamique dans cette histoire.


                Exécution

                0 -> 11
                1 -> 22
                
                



                -
                Edité par michelbillaud 3 juillet 2019 à 11:22:18

                • Partager sur Facebook
                • Partager sur Twitter
                  3 juillet 2019 à 11:56:23

                  michelbillaud a écrit:

                      // voici notre tableau de pointeurs, on l'appelle tableau,

                      // parce que chaque élément est un tableau

                  Je dirais plutôt que chaque élément est un pointeur sur entier. (ils peuvent donc pointer sur un tableau d'entiers).

                  et je dirais, on l'appelle tableau parce que c'est une suite contiguë d'élément de même type (ici pointeur sur entiers).

                  • Partager sur Facebook
                  • Partager sur Twitter
                    3 juillet 2019 à 12:38:32

                    rouloude a écrit:

                    michelbillaud a écrit:

                        // voici notre tableau de pointeurs, on l'appelle tableau,

                        // parce que chaque élément est un tableau

                    Je dirais plutôt que chaque élément est un pointeur sur entier. (ils peuvent donc pointer sur un tableau d'entiers).

                    et je dirais, on l'appelle tableau parce que c'est une suite contiguë d'élément de même type (ici pointeur sur entiers).


                    C'est toute la différence entre nommer une variable d'après

                    • son type
                    • la signification de ce qu'elle contient.

                    Je préfère éviter

                    int entier;
                    char caracteres[100]

                    au profit de

                    int   numero_inventaire;
                    char  designation_produit[100];
                    


                    Ici chaque machin[i] a vocation à représenter un tableau de nombres, donc machin = tableau (faute d'en savoir plus sur ce que sont ces nombres).


                    Donc à partir ce de que ça représente, pas ce que c'est. Parce que finalement, ce sont des variables, et ça ne serait pas une bonne idée de les appeler

                    int  variable1;
                    char variable2[100];

                    Ce qui ne montre qu'on ne les nomme pas d'après leur nature, mais par ce que représente, côté problème,  leur contenu.



                    -
                    Edité par michelbillaud 3 juillet 2019 à 12:45:29

                    • Partager sur Facebook
                    • Partager sur Twitter
                      3 juillet 2019 à 13:58:44

                      Je comprend ce que tu veux dire, mais ce qui me gène et peut prêter à confusion c'est : "parce que chaque élément est un tableau", or ce n'est pas le cas.

                      • Partager sur Facebook
                      • Partager sur Twitter
                        3 juillet 2019 à 14:54:36

                        rouloude a écrit:

                        Je comprend ce que tu veux dire, mais ce qui me gène et peut prêter à confusion c'est : "parce que chaque élément est un tableau", or ce n'est pas le cas.


                        Je te renvoie à la déclaration d'intention qui figure dans le message initial :

                        > J'aimerais avoir un tableau nombres de taille 4, de pointeurs de type int dont chaque pointeur pointera sur un autre tableau. Ce deuxième tableau s'appelera par exemple chiffre et il sera de taille 2.

                        Ou alors on pense en terme de tableau bidimensionnel de machins, et on l'appelle machin, vu qu'on accède normalement à machin[3][2].

                        -
                        Edité par michelbillaud 3 juillet 2019 à 15:01:13

                        • Partager sur Facebook
                        • Partager sur Twitter

                        Tableau de 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