Zweidimensionales Array

  • Hallo erstmal an alle!
    Ich bin neu hier und habe auch gleich mal eine frage C betreffend.

    Ich habe einige Verständnissprobleme im folgenden Quelltext:

    Code
    char z[2][3] = {{'a','b','c'},{ '0','1','2'}},
         *p=*z, *q=*(z+1), *r=*(z+1)+2;



    1. // Wieso erhält *p hier den wert 1? bzw wieso weise ich die Adresse mit *z zu?? hab ich vorher bei einer Adresszuweisung noch nie gesehen o_O
    sollte das nicht mit *p=&z[0][0] geschehen??

    2.// Der Ausdruck (*(z+1))[1] ergibt in Zusammenhang mit dem obigen Quelltext auch 1.. wie kommt es dazu??

    Ich glaube mein Problem liegt darin dass ich mich mit mehrdimensionalen Arrays nicht gut auskenne bzw mit der Zeigerarithmetik in mehrdimensionalen Arrays...

    grüße

    johnny

    2 Mal editiert, zuletzt von The User (9. Juni 2009 um 00:25) aus folgendem Grund: [code]-Verwendung!!! und bitte Majuskeln verwenden

  • Mit der Form der Variablendeklaration stehst du dir im Wege.
    Übersichtlich sähe es so aus:

    Code
    char z[2][3] = { {'a', 'b', 'c'},
                                       {'0', '1', '2'} };
    char* p = *z; // Zeiger auf char wird mit Zeiger auf char-Array, das wiederum Element eines Arrays ist, initialisiert
    char* r = (*(z + 1)) + 2; // z + 1: Array {'0', '1', '2'}, 2: Verweis auf zweites Element ( die 2)

    Also Schrittweise:

    Code
    r = *(z + 1);


    Entspricht:

    Code
    r = z[1];


    Dann:

    Code
    r = *(z + 1) + 2;


    Entspricht:

    Code
    r = z[1] + 2;


    Das heißt:

    Code
    *r == z[1][2]

    Sollte klar sein. ;)

    Viele liebe Grüße
    The User

  • :razz:
    Das freut mich!
    Super erklärt! Dankeschön!!

    Wenn ich das jetzt richtig verstanden habe ergäbe der ausdruck:

    Code
    (*(z+1))[1]


    Code
    (*(z+1)) // verweist auf array {'0','1','2'}



    und

    Code
    [1] // verweist auf das zeichen 1



    also im endeffekt auf das element 1, nämlich die 1!

    Richtig?

    Vielen Dank nochmal!!