Verständnisproblem -> Funktionen



  • Hallo nochmal 😉

    Ich habe ein kleines verständniss Problem bezüglich 'call by value' und Formalparameter/Aktualparameter.

    Ich habe vor 4 Tagen mit C++ begonnen und stecke in meinem Buch jetzt auf Seite 108 fest 😃

    Hier mal der Code, den ich nicht ganz verstehe.

    // func6.cpp
    #include <iostream>
    #include <cstdlib>
    
    using namespace std;
    // Funktions-Prototyp (Deklaration)
    int area ( int l, int b );
    bool not_null( int var );
    
    int main() {
       int var1, var2, ret;
    
       cout << "Bitte die Länge angeben  : ";
       if ( ! (cin >> var1) ) {
          cerr << "Fehler bei der Eingabe!\n";
          exit(1);
       } 
       cout << "Bitte die Breite angeben : ";
       if ( !(cin >> var2) ) {
          cerr << "Fehler bei der Eingabe!\n";
          exit(1);
       } 
    
       if( not_null( var1 ) && not_null( var2 ) ) {
          ret = area ( var1, var2 );
       }
       else {
          cout << "Eine der Angaben ist 0!\n";
          exit(1);
       }
    
       cout << "Die Fläche beträgt " << ret << "\n";
       return 0;
    }
    
    // Funktions-Definition
    int area ( int l, int b ) {
       return (l * b);
    }
    
    bool not_null( int var ) {
       if ( var > 0 ) {
          return true;
       }
       else {
          return false;
       }
    }
    

    Was ich nicht so ganz in mein Gehirn bringe ist, warum werden die Eingegebenen var1 und var2 plötzlich als die Parameter l und b behandelt sodass man auf area kommt? Laut meines verstädnisses müsste das doch eigentich bei der ersten Eingabe folgendes heißen.

    if ( !(cin >> l) ) {...}
    

    Bei der zweiten Angabe:

    if ( !(cin >> b) ) {...}
    

    Ich denke mal das ist noch eine Anfänger frage auf die man sicher eine Antwort weiß 😃

    Könnte mir vielleicht jemand sagen, warum dies so ist und warum man eigentlich nicht gleich mit den Parametern l und b rechnet? Dann könnte ich mir doch den Speicher für var1 und var2 sparen oder nicht?



  • Bei eine Funktion der Form wie area werden die beiden Parameter lokal KOPIERT!
    Das heißt sie KÖNNEN anders heissen müssen aber nicht
    l und b können verändert werden was sich nicht auf var1 var2 auswirkt
    l und b ist eine KOPIE von var1 var2
    du kannst es auch l sepp und b xsaver nennen. Das spielt keine Rolle. 🙂



  • Und ja, da es eine so simple Funktion ist könnte man auf area verzeichten und gleich var1 * var2 machen.

    ret = area ( var1, var2 );

    beideutet nichts anderes als:

    ret = var1 * var2;

    Und wenn die Funktion area ihr Ende erreicht existieren die Variablen l und b nicht mehr. Sie sind nur LOKALE variablen



  • Cool danke jetzt hab ich das auch verstanden wie das gemeint ist mit den Lokalen und Globalen Variablen... nach dem Funktionsdurchlauf existieren die Lokalen Variablen dieser Funktion ja nichtmehr.. (offiziell). Das heißt es ist völlig egal wie die Parameter heißen, solange ich ihnen zwei Werte oder Variablen des selben Datentyps übergebe, alright?



  • right
    inoffiziell gibts die auch nimmer @ runtime @ funktionsende 😃


Anmelden zum Antworten