int array und pointer darauf



  • hallo ich habe folgenden code:

    int main()
    {
      int i,j;
      int *visited[n][n];
      for(i=0;i<n;i++) {
        for(j=0;j<n;j++) {
          visited[i][j] = 0;
        }
      }
    
      func1(visited);
    
      /* ENDE */
      exit(0);
    
    }
    
    void func1(int *arr)
    {
      int next;  
      next = moeglich(arr);
      /* next weiter berechnen */
    }
    
    int moeglich(int *arr2)
    {
    
      if(visited[1][1]) {
    
      /* tu was */
    
    }
    

    kümmert euch mal nicht um die sinnvolligkeit des code's
    ich bekomme folgenden compilerfehler:
    error: subscripted value is neither array nor pointer

    und zwar aus der zeile :
    if (visited[1][1])

    wie muss ich es hier machn, dass ich so auf das int array zugreifen kann!



  • Hallo,

    du hast in deinem Beispiel mehrere Fehler gemacht. Hier erst mal
    der bereinigte Code:

    #include <stdio.h>
    #include <stdlib.h>
    
    int moeglich(int arr2[10][10]) 
    {
       if(arr2[1][1]) {
       /* tu was */
       }
       return 1;
    }
    
    void func1(int arr[10][10])
    {
      int next;
      next = moeglich(arr);
      /* next weiter berechnen */
    }
    
    int main()
    {
      int i,j;
      int visited[10][10];
      for(i=0;i<10;i++) {
        for(j=0;j<10;j++) {
          visited[i][j] = 0;
        }
      }
      func1(visited);
      /* ENDE */
      exit(0);
    }
    

    Und nun vielleicht noch etwas zu deinen Fehlern:

    int *visited[n][n];
    

    Hier definierst du dir ein zweidimensionales Feld von Typ int*, also Zeiger
    auf einem int, verwendest die Einträge aber als normale int. Dazu kommt noch
    dass in ANSI C Arrays variabler Länge nicht erlaubt sind. Richtig wäre also:

    int visited[10][10];
    

    wenn das Array maximal 10*10 Elemente fassen soll. Ansonsten würde ich mit
    malloc arbeiten.

    Fehler Nr.2:

    void func1(int *arr)
    

    Der Typ ist von arr ist nicht der gleich, wie visited. Richtig wäre:

    void func1(int arr[10][10])
    

    oder, wenn du mit malloc arbeitest

    void func1(int **arr)
    

    Den gleichen Fehler hast du bei der Funktion moeglich gemacht.

    Fehler Nr.3:
    Du hast in der Funktion moeglich in der Zeile

    if(visited[1][1]) {
    

    den falschen Bezeichner für die Variable verwendet. In der
    Funktionsdeklaration hast du die Variable arr2 genannt, so musst du
    die auch anschließend im Code verwenden. Aber ich glaube Fehler Nr.2
    ist in deinem Originalcode ausschlaggebend.

    Ach ja, bitte passe demnächst deine Minimalbeispiele so an, dass sie
    bis auf den Fehler den du hier erfragst, wenigstens kompilieren.
    Du hast einige Klammern vergessen, die Reihenfolge der Funktionen
    war auch falsch, keine includes dabei (ok, brauchtest vielleicht auch
    keine) etc.

    Na dann,
    viel Spaß dabei
    mcr


Anmelden zum Antworten