'char **a' als 'a' an 'char ***' uebergeben
-
hallo.
eine funktion hat folgenden prototyp:
func(..., const char ***a);eine variable, deklariert durch:
char **b;
wird folgend an eine funktion ergeben:
func(..., b);
das resultat ist bei dem gcc 3.2.3 der compilierfehler "passing argument from incompatible pointer type".b als zeiger auf zeiger enthaelt ohne dereferenzierungoperator die eigene adresse - somit muesste das undereferenzierte b doch als wert fuer einen zeiger auf zeiger auf arrays verwendet werden koennen. oder irre ich mich?
Gruss
caspar
-
Mal ne ganz einfache Erklärung:
Der deklarierte Parameter a hat 3 * (***a) und dein Übergabeparameter b hat nur 2 * (**b) und du übergibst auch einfach nur b. Fällt dir da irgendwas auf??
-
b ist char**
und
a ist char***du willst nun ein b übergeben wo ein a erwartet ist.
das kann nicht gehen
->
&bb kann die eigene adresse nicht beinhalten... das wäre ja irgendwie komisch...
b zeigt einfach auf einen zeiger. auf sich selbst zeigen kann er aber nicht.
-
mist, ich habe das aus unerdenklichen gruenden gemacht, wie mit einem zeiger auf char - da kann man auch nur den einfachen zeiger als anfangsadresse uebergeben :D. danke
-
Caspar schrieb:
mist, ich habe das aus unerdenklichen gruenden gemacht, wie mit einem zeiger auf char - da kann man auch nur den einfachen zeiger als anfangsadresse uebergeben
ist dir auch klar warum das so ist?
-
ja. die verwendung des dereferenzierungs operators eines arrays wird intern in eine zeigerdereferenzierung umgewandelt:
char c[5];
c[2] is gleich zu *(c+2);das bedeutet, dass c[0] gleich *(c+0) ist und dass c alleine die anfagsadresse des, in userem falle strings, enthaelt. der prototyp
func( char *a)
kann dann einfach mit func(c) bedient werden.
ich hoffe das stimmt.