Verändern von Variablen in der aufrufenden Funktion /Rückgabe von Werten aus Funktion
-
Hallo Community,
es wäre toll wenn jemand von euch mal nen Tip für mich hat.
Es sollen mehrere Werte aus einer Funktion in main() verwendet werden.
(Aufgerufene Func soll Variablen in der aufrufenden Func ändern.)
Hier ist ein Code der das eigentlich machen sollte.//check func #include <stdio.h> //prototype int getdata(int select, int *out); int main(){ int select = 0; int *out; getdata(select, &out); printf("select is %d getdata returns %d pfout is %d\n", select, getdata(select,*out), *out); system("PAUSE"); } int getdata(int choice, int *pput){ if(choice == 0) *pput = 999; if(choice > 0) *pput = 555; return 0; }
irgendwas ist da ganz fürchterlich durcheinander!?
Und dann noch eine Frage:
Im Buch von Kernighan/Ritchie ist ein Code (S26)
dort wird aus der main() die getline funktion aufgerufen und liefert line zurückso
main(){ char line[MAXLINE]; .. while((len = getline(line,MAXLINE)... .. copy(line,...) } //func int getline(char s[], int lmt)
wieso kommt die Func ohne Zeiger aus und kann line in main() verändern?
Grüße Clumsi-C
PS kann den 2. Code auch nochmal komplett posten wenn nützlich
-
Clumsi-C schrieb:
getdata(select, &out);
irgendwas ist da ganz fürchterlich durcheinander!?
out ist doch schon ein zeiger auf int. somit ist das "&" falsch.
Clumsi-C schrieb:
wieso kommt die Func ohne Zeiger aus und kann line in main() verändern?
weil int a[] in c als int *a implementiert ist.
-Gruß Manga
-
#include <stdio.h> //prototype void getdata(int select, int *out); int main(){ int select = 0; int out = 0; getdata(select, &out); printf("select is %d getdata returns %d pfout is %d\n", select,out); system("PAUSE"); } void getdata(int choice, int *out){ if(choice == 0) *out = 999; if(choice > 0) *out = 555; return 0; }
-
BorisDieKlinge schrieb:
#include <stdio.h> //prototype void getdata(int select, int *out); int main(){ int select = 0; int out = 0; getdata(select, &out); printf("select is %d getdata returns %d pfout is %d\n", select,out); system("PAUSE"); } void getdata(int choice, int *out){ if(choice == 0) *out = 999; if(choice > 0) *out = 555; return 0; }
Oh... das solltest du nicht unbedingt mahen... ein Printf mit 3 %d ausgaben, aber nur 2 weitere Variablen... Könnte zu einer Fehlerhaften ausgabe führen xD
Aber sonst würd ichs auch so machen.
-
BorisDieKlinge schrieb:
void getdata(int choice, int *out){ if(choice == 0) *out = 999; if(choice > 0) *out = 555; return 0; }
Einfach nur "return;", aber keineswegs "return 0;"!
-
johnny_legend schrieb:
BorisDieKlinge schrieb:
void getdata(int choice, int *out){ if(choice == 0) *out = 999; if(choice > 0) *out = 555; return 0; }
Einfach nur "return;", aber keineswegs "return 0;"!
Nein bei void gar keinen return... stimmt hatte ich total übersehen xD
-
Einfach nur "return;" ist OK. Heißt doch bloß für den Compiler: Hier ist Ende Gelände.
"return 0;" würde unter Umständen sogar auch funktionieren. Aber erstens bekommt man eine Warnung und zweitens ist sowas total sinnfrei.
-
ups ja, das retunr muss weg.. sorry
-
Jagut stimmt auch wieder!