Hallo!
ICh möchte eine Funktion schreiben die mir mehr als einen Rückgabewert
liefert.
z.B. ich übergebe variable a,b,c und erhalte x y z als berechneten wert
zurück, wie laesst sich das in C relalisieren.
Mein vorliegendes C Buch hilft mir auch nicht weiter.
mfg,
Bjoern
Moin!
Sven P. schrieb:
> [c]>> void meine_funktion(int a, int b, int c, int *x, int *y, int *z) {> *x => *y => *z => }
Das ist böse.
Solange man nicht die Zeiger selbst ändern will, verwendet man
'Referenzen', die extra zu diesem Zweck irgendwann erfunden worden sind:
void meine_funktion(int a, int b, int c, int &x, int &y, int &z) {
x =
y =
z =
}
Der Compiler macht daraus zwar so ziemlich das gleiche, aber er
verhindert, daß man die Zeiger evtl. aus versehen verbiegt und Unfug
damit anstellt.
HTH
Jens
Jens Carstens schrieb:
> Das ist böse.> Solange man nicht die Zeiger selbst ändern will, verwendet man> 'Referenzen', die extra zu diesem Zweck irgendwann erfunden worden sind:
Da bin ich aber gespannt, wie du das in C machst.
Hallo!
Sven, Jens danke für den Hinweis. Werd das ganze mal ausprobieren, steh
aber grade vor dem problem das mein Controller voll ist, muß sehen wo
ich noch einsparpotentail habe.
mfg,
Bjoern
Sven P. schrieb:
> Jens Carstens schrieb:>> Das ist böse.>> Solange man nicht die Zeiger selbst ändern will, verwendet man>> 'Referenzen', die extra zu diesem Zweck irgendwann erfunden worden sind:> Da bin ich aber gespannt, wie du das in C machst.
Ahemm... Jo. Ich bin im Geiste überwiegend bei C++...
Da ist das böse, in C darf man natürlich alles :-)
Merke: niemals vor dem Früstück posten!
IdS,
Jens 'vergiss einfach, was ich gesagt habe' Carstens
Hallo!
So ich probiere grade aus.
Sven's variante liefert keinen fehler im Compiler.
Die Variante von Jens liefert eine Warnung
../USI-TWI-Slave-Test.c:90: warning: assignment makes pointer from
integer without a cast
fuer die 3 Rückgabe variablen, was ist nun richtiger oder wie umschiff
ich das Warning.
Sorry, hab lange nichts mehr in C gemacht.
mfg,
Bjoern
Tishima schrieb:
> Die Variante von Jens liefert eine Warnung
Die Variante von Jens ist C++, kein C.
Sofern du nicht vor hast, auf C++ umzusteigen, vergiss seine Variante
ganz schnell wieder.
Zu deinem Code:
1
r=r1,g=g1,b=b1;
Das ist falsch. Da muss jeweils noch ein '*' davor.
Das Newline-Zeichen wird mit strtok() entfernt, und die Funktion liefert
10
auch gleich die Anfangsadresse des Strings input als Rückgabewert zurück,
11
welchen Sie gleich mit return weiterverwenden. Doch Vorsicht, Folgendes
12
funktioniert nicht:
13
14
char *eingabe(char *str) {
15
char input[MAX];
16
printf("Bitte \"%s\" eingeben: ", str);
17
fgets(input, MAX, stdin);
18
return input;
19
}
Beides ist gleichermaßen falsch. Mir ist schleierhaft, wie der Autor auf
die Idee kommt, dass die erste Funktion im Gegensatz zur zweiten einen
gültigen Pointer zurückgeben würde. Er sagt doch schließlich auch
selber, dass strtok die Adresse von input zurück liefert.
Hallo Stefan,
hmm, genau an das 2te Beispiel, welches du nennst, hab ich gedacht. Aber
dass es nicht funktionieren soll ? Habe es noch nicht ausprobiert, aber
gut zu wissen.
Ich dachte, mit return input liefere er mir die Anfangsadresse des
Arrays, auf den ich dann über die Adresse (Dereferenzierungsoperator)
drauf zugreifen kann.
Schöne Grüße
Cyrill
> Ich dachte, mit return input liefere er mir die Anfangsadresse des> Arrays, auf den ich dann über die Adresse (Dereferenzierungsoperator)> drauf zugreifen kann.
Aber input ist eine lokale Variable, die nach dem return nicht mehr
existiert.
Du musst einfach weiter lesen. Es steht dort mit drin, was das Problem
ist und wie man es umgeht.