Pointerlogik



  • Hi, wenn ich Zwei Pointer habe

    int* a = new int(5);
    	int* b;
    
    	b = a;
    	*a = 9; // Wert von b ist jetzt auch 9
    

    dann ändert sich der Wert von b jedesmal wenn ich a ändere.
    Aber was kann ich machen um b jedesmal zu ändern mit einer Art "Funktion" dazwischen. Z.b. möchte ich das der Wert von b = 2*a ist und immer geändert wird wenn a sich ändert:

    int* a = new int(5);
    	int* b;
    
    	b = a;  // Wert von b soll jetzt 10 sein.
    	*a = 9; // Wert von b soll jetzt 2*a=18 sein.
    

    Geht das irgendwie?

    Danke!


  • Mod

    Der Wert von b ändert sich gar nicht, der bleibt a (und a ist hier ebenfalls konstant). Die Werte von *b und *a ändern sich. Da dir das nicht klar zu sein scheint: Kommst du zufällig von Java? In C++ sind Objekte und Zeiger da drauf ziemlich verschiedene Dinge.

    Das wonach du hier fragst, würde man auch gar nicht mit Pointern lösen (überhaupt sieht man Pointer in C++ im Anwendungscode so gut wie nie, wenn überhaupt arbeiten die verborgen hinter den Kulissen). Du suchst wohl so etwas in dieser Richtung:

    class Foo
    {
      int a;
     public:
      int get_a() const { return a; }
      void set_a(int aa) { a = aa; }
      int get_b() const { return 2*a; }
    };
    

    oder, je nachdem, wie kompliziert die Berechnung von b ist:

    class Foo
    {
      int a;
      int b;
     public:
      int get_a() const { return a; }
      void set_a(int aa) { a = aa; b = 2 * a; }
      int get_b() const { return b; }
    };
    


  • der "wert" von a und b ändert sich nicht wenn du *a = ... schreibst sondern der pointee.

    wie man das macht was du möchtest? direkt geht das gar nicht, du musst das irgendwie wrappen. in c++ am besten mit einer klasse.

    wieso arbeitest du überhaupt mit rohen pointern und mit rohem new etc.? ist höchstwahrscheinlich nicht das was du willst.

    edit: ups, zu langsam. seppj hat alles gesagt was ich mitteilen wollte, nur ausführlicher und verständlicher.


Anmelden zum Antworten