Funktionswertrückgabe???
-
randa schrieb:
int func (int a, int b, int *erg1, int *erg2) { if (erg1 && erg2) { *erg1=a+b; *erg2=a*b; }
Schon mal was davon gehört, dass es in C++ Referenzen gibt. :p
-
groovemaster2002 schrieb:
randa schrieb:
int func (int a, int b, int *erg1, int *erg2) { if (erg1 && erg2) { *erg1=a+b; *erg2=a*b; }
Schon mal was davon gehört, dass es in C++ Referenzen gibt. :p
referenzen bringen bei den standardtypen sogut wie garnichts.
-
otze schrieb:
groovemaster2002 schrieb:
randa schrieb:
int func (int a, int b, int *erg1, int *erg2) { if (erg1 && erg2) { *erg1=a+b; *erg2=a*b; }
Schon mal was davon gehört, dass es in C++ Referenzen gibt. :p
referenzen bringen bei den standardtypen sogut wie garnichts.
Doch. Sie machen den Sourcecode leserlicher.
-
Andere möglichkeit, du gibst nen array zurueck:
int * test(int par1,int par2) { int rueck[2]; rueck[0]=par-par2; rueck[1]=par2*par1; return rueck; }
-
Greenberet schrieb:
Andere möglichkeit, du gibst nen array zurueck:
int * test(int par1,int par2) { int rueck[2]; rueck[0]=par-par2; rueck[1]=par2*par1; return rueck; }
Ne, das ist keine andere Möglichkeit. Nach dem return existiert dein Array nicht mehr...
-
otze schrieb:
referenzen bringen bei den standardtypen sogut wie garnichts.
Doch. Ua kannst dir den Test auf null sparen.
-
groovemaster2002 schrieb:
Doch. Ua kannst dir den Test auf null sparen.
Soweit hat er anscheinend nicht gedacht
-
Shlo schrieb:
Greenberet schrieb:
Andere möglichkeit, du gibst nen array zurueck:
[cpp]
int * test(int par1,int par2)
{
static int rueck[2];rueck[0]=par-par2;
rueck[1]=par2*par1;return rueck;
}
[/cpp]Nach dem return existiert dein Array nicht mehr...
doch mit static
-
Danke danke!
Ihr habt mir jetzt echt viele Tipps gegeben! Wie man was zurück gibt weiß ich jetzt aber ich weiß immer noch nicht wie ich die 2 zurückgegebenen Funktionswerte im main() wieder aufgreifen kann???Wenn ihr mir das noch sagen könntet wäre das fein!
Vielen Dank im Vorraus!
Gruß Basti
-
@ssm: Böse, du weißt schon, dass dies extreme und schwer findbare Fehler erzeugen kann - siehe ECP.
MfG SideWinder
-
SideWinder schrieb:
@ssm: Böse, du weißt schon, dass dies extreme und schwer findbare Fehler erzeugen kann - siehe ECP.
MfG SideWinder
1. zuerst gibt es keine Information, ob die Methode "thread safe" sein soll
2. deine Begründung?
-
void foo (int a [2], int b [2]; int x = foo(test(2,3) + test(2,4));
Ja hallo, wieso sind denn da plötzlich a und b gleich? Ja sowas, zeigen die Rückgabewerte von test()-Aufruf #1 und test()-Aufruf #2 auf das selbe Array? Was bilden sie sich eigentlich ein?
MfG SideWinder
-
ssm schrieb:
doch mit static
nix da, beim zweiten aufruf zeigt der vorher verwendete Zeiger auf das gleiche Array dann.
-
Hast du für diesen Text nun 6 Minuten benötigt?
MfG SideWinder
-
HILFE !!! schrieb:
aber ich weiß immer noch nicht wie ich die 2 zurückgegebenen Funktionswerte im main() wieder aufgreifen kann
Wo ist das Problem?
void foo(int& erg1, int& erg2) { erg1 = // irgendwas erg2 = // irgendwas } int main() { int a, b; foo(a, b); // a und b enthalten jetzt die Werte, die ihnen in foo zugewiesen wurden }
-
Auch schon wieder falsch verstanden!
Also sagen wir mal folgendes:
-------------------------
int test(int a, int b)
{
int z,i;.... programm code ... bla bla
return z,i;
}void main()
{
int h,k;// und wie jetzt weiter ??? wenn ich die Werte "z" und "i" aus der test
//Funktion haben will?h=test(Wert1,Wert2); // hab ich so den z-Wert??
k=test(Wert1,Wert2); // hab ich so den k-Wert? ???}
-----------------------------------Danke !
MFG
Basti
-
randa schrieb:
ssm schrieb:
doch mit static
nix da, beim zweiten aufruf zeigt der vorher verwendete Zeiger auf das gleiche Array dann.
na und?
-
SideWinder schrieb:
Hast du für diesen Text nun 6 Minuten benötigt?
MfG SideWinder
ich hab leider nicht so viel Zeit um diesen Text zu lesen. Könntest du mir kurz einen begründeten Grund sagen, wieso es nicht besonders gut ist, static variables in functions zu benutzen, wenn es nicht um "thread safe" geht?
-
wie na und?
int *schwachsinn (int a, int b, int c) { static int ar[3]; ar[0]=a; ar[1]=b; ar[2]=c; return ar; } int main () { int *a; int *b; a=schwachsinn (3, 2, 1); b=schwachsinn (4, 3, 2); cout << a[0] << a[1] << a[2] << endl; }
Teste und sieh selbst.
Edit: Wenn du unbedingt willst, das am ende alle Zeiger auf das selbe zeigen, ist das natürlich was anderes
returne ein struct oder noch besser, platziere die ausgabe in der Parameterliste:void inordnung (int a, int b, int c, int *result, int sizeof_result) { if (sizeof_result<3) return; result[0]=a; result[1]=b; result[2]=c; }
-
randa schrieb:
wie na und?
int *schwachsinn (int a, int b, int c) { static int ar[3]; ar[0]=a; ar[1]=b; ar[2]=c; return ar; } int main () { int *a; int *b; a=schwachsinn (3, 2, 1); b=schwachsinn (4, 3, 2); cout << a[0] << a[1] << a[2] << endl; }
Teste und sieh selbst.
es ist keinen Schwachsinn, es ist das besondere Verhalten, das manchmal benutzt werden darf oder soll.