Warum haben 2 Elemente im Array die gleiche Speicheradresse?



  • Hi ich wollte mal fragen, warum 2 Elemente die gleiche Speicheradresse haben?
    Es sind immer die Elemente [0][2] und [1][0].

    #define ZEILEN  2
    #define SPALTEN 3
    
    #include <stdio.h>
    #include <stdlib.h>
    
    typedef int MATRIX[ZEILEN][SPALTEN];
    
    void MatrixEingabe(MATRIX*);
    
    int main()
    {
        MATRIX m;
    
        MatrixEingabe(&m);
    
        return EXIT_SUCCESS;
    }
    
    void MatrixEingabe(MATRIX *m)
    {
        int i,j;
        for (i=0; i<ZEILEN; i++)
        {
            for (j=0; j<SPALTEN; j++)
            {
                scanf("%d", &m[i][j]);
                printf("i: %d j: %d m: %d *m: %d  \n",i,j,m[i][j],*m[i][j]);
            }
        }
    }
    

  • Mod

    Weil ZEILEN == 2 ist.

    Evtl. etwas hilfreicher: m zeigt auf ein Array, ist aber selbst keins.



  • OK, danke schonmal.
    Stimmt wenn ich ZEILEN auf einere Zahl ändere, dann funktioniert es.
    Mir leuchtet das aber noch nicht ein warum das mit der 2 nicht geht.
    hmm


  • Mod

    Nebenbei muss das (wenn du wirklich einen Zeiger auf die Matrix als Argument haben willst) heißen:

    scanf("%d", m[i][j]); // Ohne das &
    printf("i: %d j: %d m: %p *m: %d  \n",i,j,m[i][j],*m[i][j]); // Pointer gibt man mit %p aus
    

    Aber wie camper schon sagte willst du wahrscheinlich sowieso ganz was anderes, nämlich:

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef int MATRIX[ZEILEN][SPALTEN];
    
    void MatrixEingabe(MATRIX);
    
    int main()
    {
        MATRIX m;
    
        MatrixEingabe(m);
    
        return EXIT_SUCCESS;
    }
    
    void MatrixEingabe(MATRIX m)
    {
        int i,j;
        for (i=0; i<ZEILEN; i++)
        {
            for (j=0; j<SPALTEN; j++)
            {
              scanf("%d", &m[i][j]);
              printf("i: %d j: %d &m: %p m: %d  \n",i,j,&m[i][j],m[i][j]);
            }
        }
    }
    

    P.S.: Schreib doch mal ein Programm in dem du ein 1D-Array an eine Funktion übergibst, das von dieser mit Werten gefüllt wird. Dann sollte dir etwas auffallen. Falls dir nichts auffällt, dann zeig uns mal dieses Programm.



  • Ok
    Danke an euch, für eure Hilfe


Anmelden zum Antworten