Array direkt beim Funktionsaufruf erzeugen
-
Hi,
ich würde gern ein Array von irgendwelchen Objekten erzeugen, und zwar direkt als Parameter einer Funktion.
Wenn ich zum Beispiel diese Funktion hab:void f ( int * arr ) { /* ... */ }
Würde ich sie gern statt so
int iarr [3] = {1,2,3}; f ( iarr );
So aufrufen (nur als Beispiel, Syntax ist frei erfunden):
f ( {1,2,3} );
Das Array soll vor dem Aufruf der Funktion erzeugt und dann die Addresse der Funktion übergeben werden. So passiert das ja auch, wenn man einen String als Parameter übergibt. Jetzt hätte ich das nur gern statt mit char-Werten mit jedem anderen Datentyp auch.
Ich hoffe, ihr könnt mir da helfen.
Danke fürs ansehn,Morph
PS: Variable Argumentlisten statt eines Array funktionieren leider in meinem Fall nicht, weil ich das auch mit selbstdefinierten Strukturen einsetzen möchte.
-
Jetzt hätte ich das nur gern statt mit char-Werten mit jedem anderen Datentyp auch.
das geht nicht nur in C++ dort könntest mit einem template - Parameter arbeiten (heisst eine funktion kann beliebige Datentypen verarbeiten solange diese
Datentypen auch über die notwendigen Operatoren verfügen + - * / = usw.)Desweiteren müsstest Du diese Funktion mit beliebiger Parameterzahl schreiben, das geht! Das funktioniert unter C als auch unter C++!
Loesung
Du koenntest also fuer C die Funktion so definieren das sie mit unterschiedlicher Parameterzahl arbeiten kann! Und da C keine Templates unterstuetzt, die Funktion
fuer jeden Datentypen den du brauchst, extra eine solche schreiben (Funktion ueberschreiben)!Mit freundlichen Gruessen
-
Stichwort: Ellipsen - Prototypen für Funktionen mit variabler Parameterzahl
es gibt eine solche Funktion bereits in <stdio.h> nehmlich: printf(...); wenn du weisst wie ich das meine, dir ist das da bestimmt schonmal aufgefallen!
Gruesse
-
Morph01 schrieb:
Würde ich sie gern statt so
int iarr [3] = {1,2,3}; f ( iarr );
So aufrufen (nur als Beispiel, Syntax ist frei erfunden):
f ( {1,2,3} );
Wo ist das Problem wenn man es in 2 zeilen schreibt? Oo
-
sclearscreen schrieb:
Stichwort: Ellipsen - Prototypen für Funktionen mit variabler Parameterzahl
es gibt eine solche Funktion bereits in <stdio.h> nehmlich: printf(...); wenn du weisst wie ich das meine, dir ist das da bestimmt schonmal aufgefallen!
Gruesse
Seltsam, als ich das letztens ausprobiert hab, hat mir mein Compiler gesagt, dass ich Klassen nicht als Argumente benutzen kann. Jetzt macht ers, ohne zu Murren. Seltsam...
Trotzdem danke!
Morph
-
Statt nen Array kannste jetzt beliebig viele Parameter uebergeben!
Hier nen Beispiel:#include <stdio.h> #include <stdarg.h> int sum_ints(int anz_param, ...) { va_list va; int idx,sum=0; va_start(va,anz_param); for(idx=0;idx<anz_param && va != NULL;idx++) { sum = sum + va_arg(va, int); } va_end(va); return sum; } int main(int argc, char *argv[]) { int erg = sum_ints(3,1,2,3); printf("%d\n",erg); getchar(); return 0; }
mfg
-
PS: Variable Argumentlisten statt eines Array funktionieren leider in meinem Fall nicht, weil ich das auch mit selbstdefinierten Strukturen einsetzen möchte.
Gut hat ich jetzt erst gelesen, trotzdem beliebiger Datentypen funktioniert dann
nur wenn du fuer jeden Datentypen der auftritt die Funktion explizit überschreibst.MFG
-
Seltsam, als ich das letztens ausprobiert hab, hat mir mein Compiler gesagt, dass ich Klassen nicht als Argumente benutzen kann. Jetzt macht ers, ohne zu Murren. Seltsam...
hast das bestimmt als C++ - Programm kompliert also C++ als Standardsprache fuer dein Projekt gesetzt! Dann geht das auch.
In C kannste maximal nestruct
an ne Funktion übergeben!
MFG