Partage
  • Partager sur Facebook
  • Partager sur Twitter

Subscripted value is neither array nor pointer nor

Langage C

Sujet résolu
    27 avril 2019 à 15:19:21

    Bonjour à tous, j'essaie de créer un programme avec des tableaux. Il n'y a rien de compliqué dans ce que je fais, le problème c'est que je n'arrive pas à corriger mon erreur, j'ai beau chercher sur internet (il y a des pages sur ce sujet je sais) mais je ne comprend pas. Je vous mets le code :

    #include <stdio.h>
    #include <time.h>
    #include <math.h>
    #include <stdlib.h>
    
    void init(int *t, int n) {
        int ligne, colonne;
        for (ligne=0; ligne<n; ligne++) {
            for (colonne=0; colonne<n; colonne++) {
                if (ligne==0) {
                    t[ligne][colonne] = colonne;
                }
                else if (ligne!=0 && colonne==0) {
                    t[ligne][colonne] = ligne;
                }
                else {
                    t[ligne][colonne] = 0;
                }
            }
        }
    }
    
    void afficher(int *t, int n) {
        int i, j;
        for (i=0; i<n; i++) {
            for (j=0; j<n; j++) {
                    printf("%d\t", t[i][j]);
            }
            printf("\n\n");
        }
    }
    
    int main(void) {
        int t[11][11];
        init(t,11);
        afficher(t,11);
    }
    

    Et le message d'erreur :

    ||=== Build file: "no target" in "no project" (compiler: unknown) ===|
    ||In function 'init':|
    |11|error: subscripted value is neither array nor pointer nor vector|
    |14|error: subscripted value is neither array nor pointer nor vector|
    |17|error: subscripted value is neither array nor pointer nor vector|
    ||In function 'afficher':|
    |27|error: subscripted value is neither array nor pointer nor vector|
    ||In function 'main':|
    |35|warning: passing argument 1 of 'init' from incompatible pointer type|
    |6|note: expected 'int *' but argument is of type 'int (*)[11]'|
    |36|warning: passing argument 1 of 'afficher' from incompatible pointer type|
    |23|note: expected 'int *' but argument is of type 'int (*)[11]'|
    ||=== Build failed: 4 error(s), 2 warning(s) (0 minute(s), 0 second(s)) ===|
    

    Soyez indulgents svp ça fait longtemps que je n'ai pas fait de C ^^





    • Partager sur Facebook
    • Partager sur Twitter
      27 avril 2019 à 15:52:53

      Bonjour,

      En effet, la réponse doit se trouver des milliers de fois. En voilà une de plus.

      Un tableau ne peut pas être transmis à une fonction, il est automatiquement transformé en un pointeur sur son premier élément. Ainsi un int tab[10] est reçu sont forme du paramètre de type int*.
      Dans ton cas il s'agit d'un tableau dont les éléments sont eux-même des tableaux. Les éléments du tableau sont des int[11]. D'où le paramètre de la fonction doit être un pointeur sur un int[11]. l'écriture nécessite une parenthèse int (*)[11].

      void init( int (*t)[11] , int n ) {
         ...

      On peut aussi l'écrire :

      void init( int t[][11] , int n ) {
         ...

      Il est inutile et non recommandé de préciser la première dimension, car en réalité c'est bien un pointeur, et le nombre ne correspondrait à rien dans ce cas. C'est pourquoi il faut transmettre ce nombre sous la forme du paramètre supplémentaire n.

      • Partager sur Facebook
      • Partager sur Twitter

      En recherche d'emploi.

        27 avril 2019 à 15:54:49

        Hello,

        void init(int t[][11], int n)
        void afficher(int t[][11], int n)

        Et mettre 11 en #define TAILLE 11 serait une bonne chose.

        -
        Edité par edgarjacobs 27 avril 2019 à 15:55:17

        • 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

          27 avril 2019 à 17:54:27

          Oui très probablement que la réponse devait être quelque part mais je ne devais pas comprendre, c'est beaucoup plus clair avec tes explications Dalfab merci beaucoup!

          Merci pour votre rapidité à tous les 2 :)

          • Partager sur Facebook
          • Partager sur Twitter

          Subscripted value is neither array nor pointer nor

          × 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