Zweidimensionales Array aus Funktion zurückgeben.



  • Hallo zusammen,

    folgendes Bsp:

    Ich habe eine Funktion aus der ich ein 2-dim Array zurückgeben möchte. Der folgende Code ist ein Minimalbsp um das Problem zu verdeutlichen. Nehmen wir mal an, diese Funktion soll aus irgendwelchen Gründen wenn möglich nicht großartig verändert werden...

    f() {
    
    static int C[5][3] = {
    	{0,0,0},
    	{1,1,1},
    	{0,0,1},
    	{1,1,0},
    	{0,1,1},
    	{1,0,1} }
    
    return &C;
    }
    

    Wie komme ich nun an das Array in der aufrufenden Funktion ran?

    Folgender Versuch funktioniert nicht:

    main () {
    
    int ** a;
    a = f();
    }
    

    Folgendes funktioniert, aber...

    main () {
    
    int * a; // hier der unterschied zum vorherigen Codefragment.
    a = f();
    }
    

    ... aber dann ist das Array eindimensional, man kommt an die Werte aber das ist unkomfortable und es gibt eine Compilerwarnung, dass die Dimensionen nicht übereinstimmen.

    Was mache ich falsch, bzw. was hab ich da nicht richtig verstanden?
    Danke für die Hilfe.



  • So ?

    typedef int myArray[6][3];
    
    myArray* f() { 
    
    static int C[6][3] = { 
        {0,0,0}, 
        {1,1,1}, 
        {0,0,1}, 
        {1,1,0}, 
        {0,1,1}, 
        {1,0,1} };
    
    return &C; 
    }
    
    int main()
    {
        myArray*arr=f();
    	int k= (*arr)[0][1];
    }
    


  • Ich würd die äußere Dimension weglassen; auf eindimensionale Arrays würde man ja auch einen Zeiger zurückgeben. Also:

    typedef int myArray[3];
    ...
    myArray *foo() {
    ...
    return C;
    ...
    int k = arr[0][1];
    

    respektive inline, weil's so schön aussieht:

    int (*f())[3] {
      static int C[6][3] = {
        {0, 0, 0},
        {1, 1, 1},
        {0, 0, 1},
        {1, 1, 0},
        {0, 1, 1},
        {1, 0, 1}
      };
    
      return C;
    }
    
    int main()
    {
      int (*ptr)[3] = f();
      int k = ptr[0][1];
    }
    


  • DarkShadow44 schrieb:

    So ?

    typedef int myArray[6][3];
    
    myArray* f() { 
      
    static int C[6][3] = { 
        {0,0,0}, 
        {1,1,1}, 
        {0,0,1}, 
        {1,1,0}, 
        {0,1,1}, 
        {1,0,1} };
      
    return &C; 
    }
    
    int main()
    {
        myArray*arr=f();
    	int k= (*arr)[0][1];
    }
    

    hmm... nein

    int k= (*arr)[0][1];
    }
    

    führt zu einem Compilefehler:
    subscripted value is neither array nor pointer nor vector.



  • hmm... nein

    doch doch, das geht so. Vermischt du vielleicht gerade meine und seldons lösung ?


Log in to reply