Funktion mit Rueckgabe eines Zeigers auf einen Vektor



  • Hallo,

    in einem Tutorial stehen u. a. komplexe Deklarationen der Art:
    char *(*f(double *x))[8];

    es handelt sich doch um einen Zeiger auf eine Funktion, die einen Zeiger auf einen Vektor mit 8 char-Elementen zurückgibt.
    kann mir mal jemand sagen, wie der Prototy der Funktion aussehen muss.
    Versuche wie
    char statisch[8]; //globale Variable
    char * func1(double *x)
    {
    .......................
    .......................
    return &statisch;
    }
    gehen natürlich durch, doch bei

    void zeig_vektor(char *(*f(double *x))[8])
    {
    }
    bzw. dem Aufruf mit:

    void f_test(void)
    {
    zeig_vektor(func1);
    }
    erscheint folgerichtig die Warnung
    warning C4047: 'function' : Anzahl der Dereferenzierungen bei 'char ((__cdecl *)(double *))[8]' und 'char *(__cdecl *)(double *)' unterschiedlich.

    Diese ist auch nachvollziehbar, denn eigentlich müsste ja aus dem Prototyp von func1 hervorgehen, dass ein Zeiger auf einen Vektor mit 8 char-Elementen zurückgegeben wird.
    Versuche wie:
    char * func1(double *x) [8]
    oder
    char * (func1[8]) (double *x)
    oder ähnliches zeugen zwar von einer gewissen Experimentierfreude meinerseits aber nicht unbedingt von Sachkenntnis. Auch K&R schweigt sich über diese Thema aus. Hat jemand ein gutes Beispiel für die Rückgabe eines Zeigers auf einen Vektor.

    Vielen Dank und guten Rutsch

    Helmut



  • so vielleicht?

    char ** (*f (double *x));
    

    (btw. benutz zur besseren Lesbarkeit lieber ein typedef ;))



  • Hallo,
    der Tip mit dem typedef war gut.

    Danke

    Helmut



  • "char *(*f(double *x))[8];

    es handelt sich doch um einen Zeiger auf eine Funktion, die einen Zeiger auf einen Vektor mit 8 char-Elementen zurückgibt."

    bist du dir sicher? scheint mir kein function pointer zu sein, sondern eher ne function returning pointer to array of pointers to chars. demnach kann der funktionsaufruf auch nicht richtig sein. versuch mal folgendes: "char ((*f)(double *x))[8]" (= pointer to function returning pointer to array of pointers to chars (glaub ich 😉 )) bzw. "char (*(*f)(double *x))[8]" (= pointer to function returning pointer to array of chars (das duerfte dann auf deine beschreibung zutreffen)(kanns aber nicht selbst ausprobieren, hab grad kein unix und daher kein c compiler am laufen.


Anmelden zum Antworten