Variablen zurueck geben



  • Morgen

    Ich wuerd gern mal wissen wie ich den Variblen die ich in einer Funktion erstellt habe an den Aufrufer zurueck geben kann.

    Normalerweise werden doch in der Funktion erstellte lokale Variablen nach der Beendigung der Funktion aus dem Speicher geraeumft?!

    Bis jetzt verwend ich immer static da hierbei ja die Variablen fuer den naechsten Aufruf der Funktion erhalben bleiben. So scheint mir das aber nicht ne saubere Variante zu sein und ich wollte mal wissen wie mans den "richtig" macht.

    mfg profi hasser

    PS: ich WILL die Variablen in der Funktion erstellen.
    Und es geht mir nicht um Zeichen vektoren die ich mit malloc erstellen koennte.



  • das was du meinst ist doch der return-wert

    du musst am Anfang deiner Funktion definieren welchen Rückgabewert die Funktion hat, also von welchem Typ dieser ist und schreibst dann in der Funktion "return Variable;" Dann wird die Funktion beendet und Variable zurückgegeben



  • Zwei Typische Verfahren gibt es

    Methode 1
    int test(int a, int b)
     {
     int c;
     c=a+b;
     return (c);
     }
    
    Methode 2
    void test(int a, int b, int *c)
     {
      *c=a+b;
     }
    

    Im Fall 1 wird das Ergebnis als return Wert der Funktion zurückgegeben.
    Im Fall 2 wird das Ergebnis über den Pointer im Aufruf zurückgegeben



  • Zu beachten ist dabei das ein Pointer den Wert in der Originalvariablen ändert, wobei bei der ersten Methode normalerweise eine neue Variable angelegt wird in der das Ergebnis gespeichert wird.

    Code-Hacker



  • Ja, das ist mit schon klar aber wenn ich zB in der Funktion ein "ding" erstelle und im Aufrufer darauf zugreifen will, ohne resourcen verschwendend das alles zu kopieren. Wie mach ich das dann?

    int* test()
    {
    int zahl;
    zahl=2131;
    return &zahl;
    }

    so gehts nicht da ja der Speicherplatz von zahl nach der Funktion geraeumt wird.



  • mm-motm schrieb:

    Ja, das ist mit schon klar aber wenn ich zB in der Funktion ein "ding" erstelle und im Aufrufer darauf zugreifen will, ohne resourcen verschwendend das alles zu kopieren. Wie mach ich das dann?

    int* test()
    {
    int zahl;
    zahl=2131;
    return &zahl;
    }

    so gehts nicht da ja der Speicherplatz von zahl nach der Funktion geraeumt wird.

    das machst du so:

    int *test()
    {
        int *zahl;
        zahl=malloc(sizeof(int));
        *zahl=12345;
        return zahl;
    }
    

Anmelden zum Antworten