Variablen in Parameterliste
-
Hallo zusammen,
ich bin neu hier, da ich mir nebenbei etwas C beibringen möchte.Habe mal folgende Funktion aufgestellt, die erkennen und wiedergeben soll, ob der Benutzer einen positiven Wert eingegeben hat. Sofern er dies nicht getan hat, soll die Abfrage erneut erfolgen - bis ein positiver Wert eingegeben wurde.
Die positive Zahl soll anschließend in eine entsprechende Variable eingelesen werden.void eingabePositiv(int *pZahl)
(
int zahl;
printf("Bitte positive Zahl eingeben");
scanf("%d", &zahl);
while (zahl <= 0)
(
scanf("%d", &zahl)
)
*pZahl = zahl;
)(Habe ein MacBook und gerade die geschweiften Klammmern nicht hinbekommen)
Meine Fragen:
- Wieso kann ich nicht "int zahl" in die Parameterliste der Fkt. packen?
- Wieso muss ein Pointer auf Zahl in der Parameterliste sein? Kann da nicht einfach "int a" stehen und am Ende der Funktion stehen "a = zahl" ??? Da würde doch auch die Zahl in eine Variable eingelesen werden.Dankeschön schon mal für die Beantwortung meiner Anfängerfragen
Lg!
-
Lian0 schrieb:
...
Meine Fragen:
- Wieso kann ich nicht "int zahl" in die Parameterliste der Fkt. packen?Kannst du schreiben. Dann wird der Wert der Variablen übergeben.
Lian0 schrieb:
- Wieso muss ein Pointer auf Zahl in der Parameterliste sein?
Weil du den Wert der übergebenen Variable ändern willst.
Lian0 schrieb:
Kann da nicht einfach "int a" stehen und am Ende der Funktion stehen "a = zahl" ??? Da würde doch auch die Zahl in eine Variable eingelesen werden.
Das ist dann nicht mehr C.
Du hast doch aber eine Funktion! Und die kann einen Rückgabewert haben.
int eingabePositiv() { int zahl; printf("Bitte positive Zahl eingeben"); scanf("%d", &zahl); while (zahl <= 0) { scanf("%d", &zahl) } return zahl; }
Warum liest du nicht gleich ein unsigned int ein?
-
In C gibt es Parameterübergabe nur als Wert (Call by value), d.h. vom aufrufenden Kontext aus gesehen können sich Parameter nicht ändern.
Deshalb werden zu ändernde Werte üblicherweise indirekt über ihre Speicheradresse ( = Zeiger ) geändert, d.h. es wird nach wie vor ein sich nicht ändernder Wert (Zeiger) als Parameter übergeben und im Speicherbereich, auf den der Zeiger verweist, können dann innerhalb der Funktion die gewünschten Änderungen ablaufen.