'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
    ->
    &b

    b 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 😕 .


Anmelden zum Antworten