Zeiger (Pointer)



  • Hi, ich hab mal eine Frage zu den Zeigern.
    Also wann muss ich ein Stern (*) vor den Zeiger machen, und wann nicht?

    Und wenn ich den Zeiger deklariere/Initialisiere ist das dann so richtig???

    int main()
    {
       int var_1;    //<= 2 Normale Variablen
       int var_2;
    
       int *pVar_1 = NULL;
       int *pVar_2 = NULL;   // <= pVar_1 und pVar_2 "zeigen" jetz auf die 2
    
       //Variablen oder? Also Sie speichern die Adressen der Variablen?!
    
    }
    

    Und wenn ich jetz auf den "WERT" zugreifen möchte oder den "WERT" ändern möchte, dann mache ich den Stern davor oder?

    Bsp:

    *pVar_1 = 1500;
    

    und beim ausgeben zB mit cout auch mit * oder?

    Danke schonmal im Vorraus...ich finde die Zeiger irgendwie am kompliziertesten 😃



  • int main()
    {
       int var_1;    //<= 2 Normale Variablen
       int var_2;
    
       int *pVar_1 = NULL;
       int *pVar_2 = NULL;   // <= pVar_1 und pVar_2 "zeigen" jetzt nirgendwo hin 
                             //  eigentlich auf die speicheradresse 0
       pVar_1 = & var_2;     // jetzt zeigt pVar_1 auf die var_2;
       *Var_1 = 2;           // var_2 hat jetzt den wert 2
    }
    

    Kurt



  • achso. also erst die vraiablen deklarieren, dann den Pointer erstellen, und dann den Pointer auf die Variable zeigen lassen... und das &? Das ist dafür da damit der Pointer auf die Adresse Zeigt von der Var oder?



  • You got it.
    K



  • Aber warum lässt man bei der Zuweisung den Stern Weg?

    pVar_1 = &Var_2
    

    Weil es wird ja die Adresse von Var_2 in pVar_1 gespeichert . Also in die Adresse des Pointers oder wie?

    Und noch eine Frage: Könnte man "fast" immer sagen:

    Ein Stern um den Wert zu nehmen und kein Stern um die Adresse des Pointers oder der Variable anzusprechen?



  • Weil es wird ja die Adresse von Var_2 in pVar_1 gespeichert . Also in die Adresse des Pointers oder wie?

    Es wird der pointer variablen pVar_1 die Adresse der variablen Var_2 zugewiesen.

    Ein Stern um den Wert zu nehmen und kein Stern um die Adresse des Pointers oder der Variable anzusprechen?

    Der Stern ist der dereferenzierungs operator. Du sprichst damit den Wert auf den eine Pointervariable zeigt an.
    mit dem &, dem adress operator ( oder wie das auch immer heisst ) bekommst du die Adresse einer Variablen.
    Kurt



  • Achso. Also qwenn ich jetz dein Code nochmal nehme als Beispiel:

    int main() 
    { 
       int var_1;    
       int var_2; 
    
       int *pVar_1 = NULL; 
       int *pVar_2 = NULL;   
    
       pVar_1 = & var_2;     
       *Var_1 = 2;
    
       cout << *pVar_1 << endl; // Als ausgabe würde jetz 2 angezeigt
       cout << pVar_1 << endl;  // Und so die Adresse ???
       cout << &var_1 << endl;  // Und so die Adresse von Variable_1?           
    }
    

    Müsste so richtig sein oder?



  • Richtig. Kannst es ja einmal laufen lassen um zu sehen was rauskommt.
    Kurt
    EDIT: zweimal Var_1 anstatt var_1 also wird's so nicht kompilieren.





  • Gizm schrieb:

    Also wann muss ich ein Stern (*) vor den Zeiger machen, und wann nicht?

    Der Stern ist der Dereferenzierungsoperator. Wenn du *a schreibst, bedeutet das «der Wert, auf den a zeigt». Und genau so kannst du auch die Deklaration des Zeigers lesen:

    int *pVar_1;
    

    Da steht «*pVar_1 ergibt int, also muss pVar_1 ein Zeiger auf int sein».



  • so merk ich mir jetzt auch, was int& i=j; bedeutet. oder ist die erklärung doch nur in diesem fall nützlich und sonst schädlich?



  • Da musst du dich bei Bjarne Stroustrup bedanken, dass er dieses System zerstört hat. Man kann sich das aber immer noch irgendwie zurechtdenken. 🙂


Anmelden zum Antworten