Array ohne Pointer zurückgeben



  • Hallo,
    ich habe eine Funktion die eine Array zurückgibt, das Problem ist aber das die Funktion ein falsches Ergebnis zurückgibt (Weil Pointer). Da wollte ich fragen wie man ein Array aus einer Funktion zurückgeben kann, ohne Pointer.

    LG



  • Gar nicht.
    C-Arrays haben nunmal keine value semantics.
    Verschiedene Lösungen:
    1. Array als Output-Parameter übergeben.
    2a. (ohne C++11) Dafür sorgen, dass das Array value semantics bekommt. Dazu kannst du es in eine Klasse wrappen, dann wird es bei der Rückgabe kopiert.
    2b. (mit C++11) Kein Array verwenden, sondern std::array.



  • Ein Pointer zurückgeben macht ein Ergebnis nicht falsch. Benutze std::array. Oder tu das array in ein struct. Oder benutze typedef oder using um bessere Syntax zu bekommen. Oder benutze cdecl um die Syntax zu lernen/bekommen.


  • Mod

    ich habe eine Funktion die eine Array zurückgibt

    Unmöglich. Funktionen können keine Arrays zurückgeben.

    das Problem ist aber das die Funktion ein falsches Ergebnis zurückgibt (Weil Pointer)

    Aha! Du hast also einen Zeiger auf das erste Element eines funktionslokalen Arrays zurückgegeben. Das ist in der Tat ein sog. hängender Zeiger (engl. dangling pointer).

    Da wollte ich fragen wie man ein Array aus einer Funktion zurückgeben kann, ohne Pointer.

    Dazu gibt es diverse Möglichkeiten. std::array wäre die erste, die wahrscheinlich auch auf deinen Fall zutrifft:

    // benötigt <array>
    std::array<int, 4> foo()
    {
    	std::array<int, 4> arr;
    	/// arbeiten
    	arr.fill( 1);
    	arr[3] = 4;
    	return arr;
    }
    

    std::vector die nächste, falls die Größe deines Arrays dynamisch ist:

    // benötigt <vector>
    std::vector<int> foo()
    {
    	std::vector<int> arr;
    	/// arbeiten
            arr.push_back( 0 );
            arr.front() *= 4; // Tut überhaupt nichts
    	return arr;
    }
    

    Falls du etwas davon noch nicht kennst, schau in dein Grundlagenbuch.


  • Mod

    Allgemeinere, wahrscheinlich bessere Loesung:
    Gar kein Array oder Vector zurueck geben. Stattdessen Outputiterator als Parameter nehmen, Ergebnis da rein schreiben. So bleibt dem Nutzer die optimale Wahl des Containers.


Log in to reply