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.