zeiger funktionieren nicht



  • ich bin ein einsteiger in C++
    ich habe Visual C++ 2005 Express Edition

    ich hatte schon viele probleme mit diesem programm
    aber bei diesem komme ich einfach nicht mehr weiter :

    #include<iostream>
    using namespace std;
    int main (){
    
    int a=22;
    cout<<&a<<endl;
    
    int* b;
    int b=&a;
    cout<<b<<endl;
    
    }
    

    beim debuggen standen folgende fehlermeldungen:
    -----------------------------------------------------------------------------
    Fehler 1 error C2040: 'b': 'int' unterscheidet sich von 'int *' in Bezug auf die Anzahl vorgenommener Dereferenzierungen
    -----------------------------------------------------------------------------
    -----------------------------------------------------------------------------
    Fehler 2 error C2440: 'Initialisierung': 'int *__w64 ' kann nicht in 'int' konvertiert werden
    -----------------------------------------------------------------------------
    Fehler 3 error C2088: '<<': Ungültig für class
    -----------------------------------------------------------------------------

    kann es sein dass ich vergessen habe eine header datei einzubinden?



  • int* b;
    int b=&a;         // Hier deklarierst du b erneut, es wurde aber schon als int* deklariert.
    

    Du kannst den Zeiger entweder direkt initialisieren:

    int* b = &a;
    

    oder zuerst definieren und dann zuweisen:

    int* b;
    b = &a;
    


  • danke jetzt funktioniert es
    🙂 👍



  • int* b;
    b = &a;
    

    müsste es nicht heißen

    int* b;
    *b = &a;
    

    oder geht beides?

    lg

    Walter



  • @Walter S.

    int* b; 
    *b = &a;
    

    b stellt den Typ int dar.
    &a stellt den Typ int
    dar.
    Somit funktioniert die Zuweisung nicht.

    Außerdem würde mit *b ein Zeiger dereferenziert, der irgendwo hinzeigt -> Undefiniertes Verhalten.

    Keine Garantie auf Richtigkeit.
    MfG


  • Administrator

    @Walter S.,
    Das sind unterschiedliche Dinge. Ich empfehle nochmals die Grundlagen zu lesen 😉

    int* p; // Zeiger auf ein int, wilder Zeiger, uninitialisiert.
    int a = 4; // a ist ein int-Objekt.
    
    p = &a; // p hat nun die Adresse auf a gespeichert.
    
    *p = 10; // p wird dereferenziert und dadurch dem a-Objekt den Wert 10 zugewiesen.
    // a hat somit nun den Wert 10!
    

    Falls das nicht verständlich genug war, am besten nochmals Zeiger&Co nachschlagen 😉

    Grüssli



  • Walter S. schrieb:

    int* b;
    b = &a;
    

    müsste es nicht heißen

    int* b;
    *b = &a;
    

    oder geht beides?

    lg

    Walter

    Nein, *b ist vereinfacht gesagt das, worauf b zeigt.



  • ja danke war sehr verständlich. Das kommt davon wenn zu viele dinge gleichzeitig macht und dann mal eben postet ohne nachzudenken 🙂



  • -close-


Anmelden zum Antworten