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?)