Zeiger als Rückgabewert einer Funktion
-
Guten Tag,
ich hätte eine Frage zu Zeigern und Funktionen. Gegeben ist folgende Sinnlosfunktion:
char* ausgabe(char *t[]); { return &t[0]; }
Nach meinem Verständnis ist dies doch eine Funktion, die als Rückgabewert einen Zeiger auf eine Char-Variable liefert und als Parameter einen Zeiger auf ein Char-Array fordert.
Wenn ich nun aber versuche, diese Funktion aufzurufen, muss ich doch den Adresswert des Arrays übergeben und deshalb des &-Operator verwenden.char r[2] = {'A', 'B'}; *ausgabe(&r);
Leider liefert mir der Compiler in diesem Fall immer die Meldung "cannot convert 'char*' to 'char**'" und ich weiß leider nicht warum.
Es wäre wirklich nett, wenn jemand eine Idee hätte warum das so nicht funktioniert. Das würde mir beim Verständnis sehr helfen.
Viele Grüße
-
@hmars sagte in Zeiger als Rückgabewert einer Funktion:
Nach meinem Verständnis ist dies doch eine Funktion, die als Rückgabewert einen Zeiger auf eine Char-Variable liefert und als Parameter einen Zeiger auf ein Char-Array fordert.
char* ausgabe(char *t[]);
ist dasselbe wie
char* ausgabe(char **t);
Die Funktion nimmt also einen Zeiger auf einen Zeiger auf
char
.
-
@hmars sagte in Zeiger als Rückgabewert einer Funktion:
t[0]
Was hat
t
für einen Typ?
Was hatt[0]
für einen Typ?
Was hat&t[0]
für einen Typ?Und passt das zum Rückgabe-Typ deiner Funktion?
-
Du musst lernen, wie eine Deklaration zu lesen ist. Glaub die Regel heißt right-left-rule. Den Link muss ich gerade mal suchen... https://gist.github.com/c00kiemon5ter/3023944
char *t[]
t is an array of pointers to char. Und wegen array-to-pointer-decay zerfällt das Array bei der Übergabe in einen Zeiger auf das erste Element des Arrays, also char** t.
char (*t)[]
t is a pointer to an array of chars. Hier hast du also einen Zeiger auf ein char-Array.
-
Und wenn du char-Arrays und char-Pointer statt std:.string und std::string_view betrachtest, bist du möglicherweise auf dem Holzweg.
-
@out Vielen Dank für die Erklärung und den Link. Das hat mir wirklich weitergeholfen.