Zeiger auf Zeiger und mehrdimensionale Arrays



  • Ich habe scheinbar einige Verständnisprobleme mit Zeigern auf Zeigern, bzw. mehrdimensionalen Arrays.

    Ein einfaches Array ist das gleiche wie ein Zeiger auf die Anfangsadresse des ersten Elements.

    Bei einem 2d Array müsste es äquivalent sein. Ist denn die Deklaration von char **p identisch mit char *p[]? Wahrscheinlich nicht, sonst könnte ich char **p genauso handhaben wie char *p[] - das geht IMHO nicht.

    Aber worauf zeigt bei einem 2d Array wie z.B. bei der main Funktion ein *argv? **argv derefenziert das Erste char in dem 2d Array, argv zeigt auf das erste char Element in dem 2d Array.

    Schon mal vielen Dank im voraus!



  • arrays sind keine zeiger. arrays werden nur implizit zu zeigern in vielen faellen und zeiger kann man oft wie arrays behandeln.

    sizeof(pointer) = 4 fuer 32bit systeme
    sizeof(array) ist die groesse in bytes

    char a, *b, **c;

    a = 'A';
    b = &a;
    c = &b;
    **c = 'B';
    printf("%c %c %c", a, b[0], c[0][0]);

    klar soweit?

    2d arrays a la char foo[10][10]; sind eigentlich 1d arrays mit einer indizierungslogik wie [x + y*xdim].
    dynamische 2d arrays sind arrays von pointern die wiederum auf speicher zeigen.



  • so weit ich noch weiss ist ein array eine anzahl an elementen und beim zugriff nimmt man dann die stelle die man anwählen will und damit auch die adresse.
    zeiger - zeigen auf eine speicheradresse, egal was es ist ob int char oder ein array 😉
    es sieht nur so aus, ist aber nicht so. 😉
    lass dich nicht täuschen 😃

    kauf dir richtiges buch z.b. Linux/UNIX Systemprogrammierung
    oder zieh dir das buch "C von A bis Z"
    das hilft



  • maximo schrieb:

    so weit ich noch weiss ist ein array eine anzahl an elementen und beim zugriff nimmt man dann die stelle die man anwählen will und damit auch die adresse.

    wtf?


Anmelden zum Antworten