Funkionen und Rückgabewerte
-
Hallo,
bin relativer Neuling in der C Programmierung und arbeite mit dem BCB6.
Eine grundlegende C Frage:
Ist es möglich eine Funktion zu schreiben, die als Eingabewerte double Variablen erhält und in der diese zu einer Struktur weiterverarbeitet werden und diese Struktur zurückgegeben werden kann?
Einfaches Beispiel
struct summe(double a,double b) {struct { double summe; double summand1; double summand2;} ergebnis; ergebnis.summe = a+b; ergebnis.summand1=a; ergebnis.summand2=b; return ergebnis;} //---------------------------------------------------------------------------- //BCB Code Unit1.cpp //Auslesen der Edit-Felder double a=StrToFloat(Edit1->Text); double b=StrToFloat(Edit2->Text); //Aufruf der Funktion summe c=summe(a,b); //Ergebnisdarstellung Label1->Caption=c.summe; Label2->Caption=c.summand1; Label3->Caption=c.summand2;
→Der Compiler meckert!
Ist denn Grundsätzlich der cast von double zu struct nicht möglich?
Müssen Eingabeparameter und Rückgabewerte zwingend dem selben Typ entsprechen?
Falls ich keine struktur übergeben kann bei Eingabe von double Variablen, wie kann ich denn mehrere Rückgabewerte innerhalb einer Funktion definieren und diese dann gezielt außerhalb der Funktion ansprechen?Hoffe mir kann jemand dieses Problem näher beschreiben.
Vielen Dank und liebe Grüße
Todd
-
Todd schrieb:
Ist es möglich eine Funktion zu schreiben, die als Eingabewerte double Variablen erhält und in der diese zu einer Struktur weiterverarbeitet werden und diese Struktur zurückgegeben werden kann?
Ja natürlich ist es möglich, du definierst die struct bzw. leitest die struct in main() ab und übergibst die adresse der struct als übergabeparameter. Dann kannst du damit in der Funktion machen was du willst, und die struct existiert auch noch nach Aufruf der Funktion.
Wenn du innerhalb der Funktion den Speicher für die struct mittels malloc() allokierst, kannst du auch einen Pointer auf die Struct zurückgeben.Todd schrieb:
Ist denn Grundsätzlich der cast von double zu struct nicht möglich?
Naja ein "direkter" cast auf die struct nicht, aber auf die variablen der struct schon.
Todd schrieb:
Müssen Eingabeparameter und Rückgabewerte zwingend dem selben Typ entsprechen?
Nein müssen sie nicht. Du kannst verschiedene Typen innerhalb der Funktion als Returnwert casten.
Todd schrieb:
Falls ich keine struktur übergeben kann bei Eingabe von double Variablen, wie kann ich denn mehrere Rückgabewerte innerhalb einer Funktion definieren und diese dann gezielt außerhalb der Funktion ansprechen?
Du kannst immer nur einen Wert/Typ zurückgeben.
Und jetzt ein kleines simples Beispiel (ohne Prüfung auf Syntax):
struct summe {double a,double b}; void addiere(double a_, double b_, struct summe *s_); int main() { struct summe mySumme; double c=StrToFloat(Edit1->Text); // kein ANSI C, aber hierfür egal!!! double d=StrToFloat(Edit2->Text); // kein ANSI C, aber hierfür egal!!! addiere(c, d, &mySumme); return 0; } void addiere(double a_, double b_, struct summe *s_) { *s_->a=a_; *s_->b=b_; }
-
Ich frage mich, was mit
struct summe(double a,double b);
gemeint wird
da fehlt den Namen des Structs!
btw: das ist der ANSI C Forum, du hast aber C++ Code
-
supertux schrieb:
Ich frage mich, was mit
struct summe(double adouble b);
gemeint wird
da fehlt den Namen des Structs!
btw: das ist der ANSI C Forum, du hast aber C++ Codeer meint bestimmt
struct summe {double a; double b;}
also keinen funktionsprototypen...
-
das dachte ich mir auch, aber man weiß nie mit den C++ Typies
-
Heieiei,
entschuldigt bitte. Hätte wohl eher ins C++ Forum gehen sollen.
Trotzdem vielen Dank für eure Hilfe...
Der C++ Typ