Array als rückgabewert einer Funktion?



  • Hallo ist es irgendwie möglich dass ich eine Funktionen einen short-Array zurück gibt?
    Oder muss ich das über einen struct oder mit referenzen/pointer machen?



  • Ein echtes Array zurückgeben ist nicht möglich, aber du kannst einen Pointer auf short zurückliefern.



  • ... aber dann solltest du darauf achten, daß das Ziel dieses Pointers das Ende der Funktion überlebt (statisches Array, Parameter oder Heap-Array).



  • lord_fritte schrieb:

    Hallo ist es irgendwie möglich dass ich eine Funktionen einen short-Array zurück gibt?

    du könntest das array in eine struktur packen, dann wird es gnadenlos kopiert, wenn du eine solche struct zurückgibst. solche kopierorgien werden oft in C++ gemacht, in C arbeitet man dann doch lieber mit pointern (siehe meine vorredner).
    🙂



  • Das versteh ich noch nicht ganz!

    Bin neu in C und kenne Sachen wie Struct und referenzen/Pointer nicht!

    Wie kann man den dann z.B eine INT-Array Initialisierungs Funktion realisieren??

    Ich will die Initialisierung in eine externe Funktion packen und die Initialisierung nicht in einer Funktion durchführen die eigntlich nur für eine Fallunterscheidung zuständig ist!!



  • Eine Möglichkeit ist es, das Array in ein struct zu verpacken:

    typedef struct
    {
      int data[ARRAY_SIZE];
    } my_array;
    
    my_array get_array()
    {
      my_array arr;
      ...//fülle arr.data
      return arr;
    }
    
    my_array theArr = get_array();
    

    In C üblicher ist wohl die Verwendung des Heaps oder die nachträgliche Initialisierung eines Arrays:

    int* get_array_ptr()
    {
      int* data = calloc(count,sizeof(int));
      ...//fülle das Array
      return data;
    }
    
    int* theArr = get_array_ptr();
    ...//mach was
    free(theArr);
    
    void init_array(int* arr,int len)
    {
      ...//fülle das Array
    }
    
    int theArr[COUNT];
    init_array(theArr,COUNT);
    ...//mach was
    

    (in C++ würde ich einen std::vector verwenden)



  • @CStoll: Wird beim Kopieren der Struktur jedes einzelne Element der Struktur kopiert?



  • Ja, das wird - etwas anderes bleibt auch gar nicht übrig. (oder willst du tatsächlich riskieren, auf undefinierten Daten zu arbeiten?)


Anmelden zum Antworten