Wert einer globalen Variable in einer lokalen Funktion global inkrementieren?



  • Hallo liebe C++ Community.

    An folgender Aufgabe verzweifle ich gerade:

    *Definieren Sie ein struct Point, welches 2 Attribute vom Typ int enthält (x,y).
    Schreiben Sie eine Funktion inc_and_add, die einen Point übergeben bekommt, beide Attribute des Punktes inkrementiert und danach die Summe der Attribute ausgibt.
    Testen Sie Ihr Programm mit folgender main Funktion
    (sie darf nicht verändert werden!):

    int main()
    {
    Point p = {3, 2};
    cout << inc_and_add(p) << endl;
    cout << p.x << " " << p.y << endl;
    return 0;
    }

    Der Output sollte folgender sein:
    cradle ~/cpp/uebung3$ ./a.out
    7
    4 3*

    Das Problem ist: Ich darf die main-Funktion nicht ändern. Mein Code lautet bisher:

    #include <iostream>

    using namespace std;

    struct Point
    {
    int x;
    int y;
    };

    int inc_and_add (Point p)
    {

    ++p.x;
    ++p.y;
    int c = p.x + p.y;
    return c;
    }

    int main()
    {
    Point p = {3, 2};
    cout<<inc_and_add(p)<<endl;
    cout<<p.x<<" "<<p.y<<endl;
    return 0;
    }

    Dieser gibt aber aus:

    7

    3 2

    statt:

    7

    4 3

    Mir ist nicht klar wie ich in einer lokalen Funktion den Wert einer globalen Variablen global inkrementieren kann. Geht das überhaupt?? Und in der Funktion
    eine neue globale Variable namens p.x einzufügen nach der Art:

    static int p.x = p.x++; geht auch nicht, da in Variablennamen keine Punkte vorkommen dürfen und ich in der main-Funktion ja auch nichts ändern darf. Außerdem hatten wir static eigentlich noch nicht.

    In der selben Vorlesung hatten wir neben struct noch c-Typecasting (das hat soweit ich das verstanden habe damit nichts zu tun), Array Dekleration und Referenzvariablen. Davor haben wir Kontrollstrukturen gehabt aber die bringen mir ja auch nichts. Ich hab was von Zeiger beim googlen gelesen (hatten wir noch nicht) geht das vllt damit? Die Beispiele dazu waren aber alle anderns. Man hatte definierte Variablen und keine Werte inkrementiert.

    Kann mir jemand einen Tipp geben wie ich das bewerkstelligen soll, dass ohne das ich an der main-Funktion was ändere, die in

    int inc_and_add (Point p)

    inkrementierten Werte für p.x und p.x in der main ausgegeben werden??

    Selbst würde ich nie so eine main-Funktion Programmieren sondern das anders machen. Aber ich darf ja nicht.

    Gruß



  • Du suchst nach Referenzen. 😉



  • p ist auch nicht global, sondern loakal in main ;
    (bzw. dann auch lokal in inc_and_add )

    Wäre p global, hättest du keine Probleme mit dem ändern.
    Dann dürftest du aber die Variable in der Parameterliste von inc_and_add nicht auch p nennen.


Anmelden zum Antworten