Return of multiple array



  • Hallo erst einmal.

    Habe vor kurzem angefangen mich mit c auseinander zusetzen und bin relativ schnell und weit vorran gekommen, bis ich auch ein Problem gestoßen bin.

    #include <stdio.h>
    #include <stdlib.h>
    
    int main (void)
    {
      foobar();
      printf ("%s", array[0]); // einfach so in den Raum gestellt
      return 0;
    }
    
    #include <stdio.h>
    #include <stdlib.h>
    
    int foobar ()
    {
    char array [12][12];
    char array2 [12][12];
    
    /* hier kommt etwas ganz langes was die arrays befüllt*/
    
    return ( array, array2 );
    }
    

    Was muss ich nun bei der main Funktion beachten damit ich dort auch wirklich das array was mir vorher aus der foobar Funktion überreicht wurde ausgeben kann.

    Ich habe schon so einiges im Web angeschaut, aber dort findet man zich tausend viarianten wie man ein array übergibt. Mit Pointer, ohne Pointer, ich hab keine Ahnung mehr, hab schon alles ausprobiert 😞

    Würde mich freuen wenn ihr einen einfachen vorschlag habt wie man es macht.

    mfg akoww



  • Die Arrays werden mit beenden der Funktion gelöscht. Das heißt der Zugriff aus geht nicht mehr.
    Zudem kannst du nicht mehr als ein Wert mit return zurückgeben.

    Du solltest die Arrays in main deklarieren und an foo übergeben.

    #include <stdio.h>
    #include <stdlib.h>
    
    int foobar (char array [12][12], char array2 [12][12])
    {
    /* hier kommt etwas ganz langes was die arrays befüllt*/
      return 0;
    }
    
    int main (void)
    {
    
    char array [12][12];
    char array2 [12][12];
    
      foobar(array, array2);
      printf ("%s", array[0]); 
      return 0;
    }
    

    PS: Es gibt noch static Variablen die in einer Funktion am Leben bleiben. Das sind dann aber bei jedem Aufruf immer die selben (und können unschöne Seiteneffekte haben).



  • Erst einmal vielen Dank 🙂

    Also wenn ich die arrays weiterhin behalten will soll ich die in eine Konstante packen oder einfach weiter in der Funktion verwenden - soweit so klar.

    Das mit der Konstante wäre in meinem Fall sogar ideal da die Werte nicht mehr verändert werden sollen.



  • Falls du static meinst: Das sind keine Konstanten, sondern dafür gedacht, das sich Funktionen zwischen den Aufrufen Werte merken können.
    static ist etwas anderes als const.

    Wenn du die Arrays in main deklarierst, kannst du foobar auch mit unterschiedlichen Arrays aufrufen. Somit bist du wesentlich flexibler.
    Parameter musst du ja eh angeben, da du mehr als einen Wert zurückgeben willst. Und da es Arrays sind, funktioniert das am besten mit Zeigern.


Anmelden zum Antworten