Verständnis Problem mit Pointer



  • Wieso hat ptr2 hier am ende den selben Wert wie ptr1 ?

    #include <iostream>
    using namespace std;
    
    int main()
    {
    
    int firstvalue = 5, secondvalue = 15;
    int * p1, * p2;
    
      p1 = &firstvalue;
      p2 = &secondvalue;
    
      *p1 = 10;
      *p2 = *p1;
    
      cout<<"*p1: "<< * p1 << endl;
       cout << "*p2: " << * p2 << endl;
       cout<<"Firstvalue: "<< firstvalue << endl;
    
      cout<<"-----------------------------------------------------"<<endl;
    
       p1 = p2;   // immer wenn sich jetzt der wert von p1 ändert ändert
                  // sich dann auch immer der wert von p2 ?
       *p1 = 30;
    
       cout<<"*p1: "<< * p1 << endl;
       cout<<"*p2: "<< * p2 <<endl;
       cout<<"secondvalue: " << secondvalue << endl;
    
    return 0;
    }
    

    Bei normalen Variablen wäre das ja so:

    Das leuchtet mir auch ein wieso ptr2 hier nicht den Wert von ptr1 am ende hat.
    Aber wie ist das bei den Pointern ?

    #include <iostream>
    using namespace std;
    
    int main()
    {
    int var1 = 1;
    int var2 = 2;
    
    var1 = var2;
    
    var1 = 3;
    
    cout<<"var1: "<< var1 << endl;
    cout<<"var2: "<< var2 << endl;   // var2 behält den wert 2
    
    system("PAUSE");
    }
    


  • Sry mein 2tes Beispiel war falsch hier ist jetzt das richtige:

    #include <iostream>
    using namespace std;
    
    int main()
    {
    
    int var1 = 10;
    int var2 = 30;
    
    int ptr1;
    int ptr2;
    
    ptr1 = var1;
    ptr2 = var2;
    
    ptr1 = ptr2;
    
    ptr1 = 40;
    
    cout<<"var1: "<<  ptr1 << endl;
    cout<<"var2: "<< ptr2 << endl;   // var2 behält den wert 2
    
    system("PAUSE");
    }
    


  • int ptr1;
    int ptr2;

    Das sind keine Pointer!

    ptr1 = var1;
    ptr2 = var2;

    Jetzt kopierst du die Inhalte in die beiden Integer-Variablen.

    ptr1 = ptr2;

    Jetzt kopierst du den Inhalt von ptr2 in ptr1

    ptr1 = 40;

    Jetzt kopierst du 40 nach ptr1. ptr2 interessiert das nicht.



  • Ich weiss das dass hier keine Pointer sind !

    int ptr1;
    int ptr2 .......

    Es ging ja auch um das erste Beispiel das verstehe ich nicht.

    Das hast du bestimmt nicht gelesen !



  • Ja der Wert von Ptr2 wird sich immer ändern wenn du den Wert von Ptr1 änderst.

    Denn im Grunde genonommen hat ja Ptr1 gar keinen Wert mehr nach:

    Ptr 1 = Ptr2

    denn es übernimmt den Wert von Ptr2, der ja eigentlich auch keinen Wert hat, sondern bloss weiter pointet :p



  • Samyboy schrieb:

    Ja der Wert von Ptr2 wird sich immer ändern wenn du den Wert von Ptr1 änderst.

    Denn im Grunde genonommen hat ja Ptr1 gar keinen Wert mehr nach:

    Ptr 1 = Ptr2

    denn es übernimmt den Wert von Ptr2, der ja eigentlich auch keinen Wert hat, sondern bloss weiter pointet :p

    Genau genommen ist der Wert eines Zeigers eine Speicheradresse (oder 0). Nur, ob das, worauf die Adresse zeigt Sinn macht oder nicht ist eine andere Frage und kann alleine durch den Zeiger nicht beantwortet werden.



  • *ptr schrieb:

    p1 = p2;   // immer wenn sich jetzt der wert von p1 ändert ändert
                  // sich dann auch immer der wert von p2 ?
    

    Jetzt zeigt p1 auf die selbe Speicheradresse, wie p2.

    *ptr schrieb:

    *p1 = 30;
    

    Jetzt wurde der Speicherinhalt verändert, auf den p1 zeigt. Und da p2 ja auf die selbe Adresse zeigt, kannst Du auf diesen Speicherinhalt entweder mit *p1 oder *p2 zugreifen.


Anmelden zum Antworten