Zeiger auf Zeiger



  • Hallo C-Fans,
    ich beschäftige mich gerade mit dem Thema Zeiger auf Zeiger. Dabei ist mir nicht klar, warum einige Schreibweisen ein char, andere einen ganzen String zurückliefern, wie hier:

    char *farbe[] = {"Weiss","Pink","Blau","Grün"}

    hier liefert
    *farbe[1],*(farbe[3]+2) und ((farbe+1)+3) jeweils ein char,
    aber
    *farbe sowie farbe[2]+1 jeweils einen String.
    Warum eigentlich??

    Danke schon mal



  • also
    *farbe
    ist identisch zu farbe[0] oder *(farbe + 0).

    farbe ist vom typ char**. das bedeutet, wenn du den dereferenzierungsoperator
    * anwendest erhaelst du einen char*. der operator[] macht genau das fuer dich;
    d.h. folgende ausdruecke sind identisch:
    farbe[1] <-> *(farbe + 1)
    farbe[27] <-> *(farbe + 27)
    (das [] ist also nur eine kuerzere schreibweise).

    in deinem fall bekommst du bei einmaligen anwenden von * immer einen char*
    (also string) zurueck (-> *farbe und farbe[2]+1).
    wendest du den *-operator nochmal an bekommst du einen char zurueck:
    *farbe[1] (entspricht: farbe[1][0])
    *(farbe[3]+2) (<-> (farbe[3]+2)[0])
    ((farbe+1)+3) (<-> (farbe[1]+3)[0])

    mach dir klar, dass du auf einen zeiger einen int addieren kannst (wert: n).
    damit kannst du den zeiger n-stellen "weiterbewegen".

    aeh, ich hoffe ich hab dir geholfen und dich nicht noch mehr verwirrt... 🙂



  • Ja, prima, danke, ich glaube ich hab's verstanden.


Anmelden zum Antworten