Tableau multidimensionnel, langage C
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

Tableau multidimensionnel, langage C



  1. #1
    invitefc342db7

    Tableau multidimensionnel, langage C


    ------

    Bonsoir,

    J'ai un soucis lorsque je veux faire passer un tableau multidimensionnel dans une fonction.

    Par exemple j'aimerais quelque chose qui ressemble à ceci:
    J'ai déclaré un tableau et je veux à l'indice [2][3] la valeur de 3:

    /* Fonction */
    void fonction(int *t) {
    t[2][3]=3;
    return;
    }

    /* Fonction main */
    int main(void) {
    int t[8][8],i,j;
    for (i=0 ; i<8 ; i++){
    for (j=0 ; j<8 ; j++){
    t[i][j]=0;
    }
    }
    fonction(&t[0][0]);
    printf("%d",t[2][3]);
    return 0;
    }

    Voilà ce que ça me retourne quand j'essaye de compiler:
    Tableau multidimensionnel.c:5:5: erreur: subscripted value is neither array nor pointer nor vector

    et ça me souligne cette ligne: t[2][3]=3;

    J'ai fouillé un peu partout mais sans trouver de solutions. J'ai lu que déclarer un tableau comme ceci: int tableau[5][5] n'est pas vraiment un tableau multidimensionnel et le problème vient de là. Je suis débutant en langage C et je ne connais que les tableaux à 1 dimension.

    En espérant avoir été le plus clair possible, merci.

    -----

  2. #2
    JPL
    Responsable des forums

    Re : Tableau multidimensionnel, langage C

    Les programmes doivent être indentés (le tien ne l'est pas) et postés dans la balise Code (#).
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

  3. #3
    Jack
    Modérateur

    Re : Tableau multidimensionnel, langage C

    Code:
    void fonction(int *t) {
    t est un pointeur d'entier.
    Code:
    t[2][3]=3;
    Comment veux-tu que le compilateur devine à quelle adresse se trouve t[2][3] étant donné qu'il ne connait pas les dimensions que tu as choisies?

    En passant:
    Code:
    fonction(&t[0][0]);
    c'est compliqué .
    Code:
    fonction(t);
    fait la même chose en plus simple.

    A+
    Dernière modification par Jack ; 16/12/2013 à 01h09.

  4. #4
    invite1c6b0acc

    Post Re : Tableau multidimensionnel, langage C

    Bonjour,
    Pour que ta fonction puisse interpréter correctement un tableau à n dimensions, il faut lui donner les (n-1) dernières :

    Code:
    void fonction (int (*tab) [10] [5])
       {
       tab [3] [7] [2] = 42;
       }
    int main ()
       {
       int tableau [27] [10] [15];
       fonction (tableau);
       // ici, on peut vérifier que tableau [3] [7] [2] contient bien 42
       }
    ça impose évidemment que les dimensions soient constantes.
    Si tu veux que ta fonction marche avec un tableau dont les dimensions soient variables, tu peux le faire avec un tableau de pointeurs qui pointent vers des tableaux de pointeurs qui pointent vers des tableaux de pointeurs, etc. et les allouer toi-même.
    C'est assez lourd à allouer : il faut des boucles imbriquées.

    Le C++ offre des outils un peu plus légers que le C.

  5. A voir en vidéo sur Futura
  6. #5
    invitefc342db7

    Re : Tableau multidimensionnel, langage C

    Merci, j'ai compris mon erreur!

    Et je suis désolé pour la mise en forme.

Discussions similaires

  1. [Langage C] Erreur dans tableau ?
    Par invite48ca7510 dans le forum Programmation et langages, Algorithmique
    Réponses: 4
    Dernier message: 28/12/2012, 11h46
  2. Suppression d’élément dans un tableau, langage C.
    Par invitebf26947a dans le forum Programmation et langages, Algorithmique
    Réponses: 24
    Dernier message: 16/10/2012, 19h28
  3. conversion d'un tableau(langage C)
    Par invitefa15af9f dans le forum Programmation et langages, Algorithmique
    Réponses: 5
    Dernier message: 08/04/2012, 15h06
  4. [PIC18F2550] langage C,MPLAB avec CCS - problème de tableau
    Par inviteff826af6 dans le forum Électronique
    Réponses: 2
    Dernier message: 08/04/2010, 15h32
  5. Tableau en langage C
    Par invite1439ebd6 dans le forum Logiciel - Software - Open Source
    Réponses: 9
    Dernier message: 21/08/2007, 00h27