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.


Anmelden zum Antworten