Array übergeben



  • Hi!

    Ich möchte ein 2d-Array aus einer Funktion zurückgeben.
    So weit ich das weiß, geht das nur, indem ich einen Pointer auf das Array zurückgeben, da eine Funktion kein ganzes Array zurückgeben kann.

    Schaut ungefähr so aus:

    int array[9][9];
    int *pointer;
    int* func()
    {
     pointer = &array[9][9];
     return pointer;
    }
    

    dann in der aufrufenden funktion:

    int array2[9][9];
    int *pointer2;
    pointer2 = func();
    array2[9][9] = *pointer2;
    

    Ich weiß, dass das kompletter Blödsinn ist, aber was besseres is mir nicht eingfallen. 😉

    Vielen Dank im Vorraus!



  • wenn das feld wie in deinem bsp. bereits global ist brauchst du es nicht zurueckgeben 🙄
    ansonsten:

    #include <iostream>
    
    int** f()
    	{
    	static int arr[2][2]={ 1,2,3,4 };
    	return reinterpret_cast<int**>(&arr);
    	};
    
    int main()
    	{
    	std::cout<<reinterpret_cast<int>(f()[3]);
    	return 0;
    	};
    

    ist aber stark von abzuraten.

    2d arrays aus funktionen zurueckgeben geht afaik nicht. -zumindest hat man keine informationen mehr ueber die beschaffenheit des 2d arrays weswegen man es noch hoechstens als 1d array verwerten koennte.



  • Okay, thx



  • return reinterpret_cast<int**>(&arr);
    

    Hübsch. Aber wie ich hier schon so oft erklärt habe (so oft, dass es sogar eine FAQ ist: http://www.c-plusplus.net/forum/viewtopic-var-t-is-58906.html), ist ein Zeiger auf das erste Element eines zwei-dimensionales int-Arrays kein int** sondern ein int(*)[secondDim].

    Sowas ginge also:

    typedef int Matrix[3][3];
    typedef int(*pMatrix)[3];
    
    pMatrix f() {
        static Matrix m;
        return m;
    }
    

    Ob das nun Sinnvoll ist, sei mal dahingestellt.


Anmelden zum Antworten