Pointer



  • Hey Leute hab da ne Frage bezüglich pointer und zwar steht in meinem Buch folgendes:

    string s("hello world");
    string *sp = &s; // sp holds the address of s (ok ist klar)
    cout << *sp; // prints hello world (ist auch klar)
    
    *sp = "goodbye" // cntents of s now changed (ist auch klar)
    
    string s2 = "some value";
    sp = &s2 // sp now points to s2 (kapier ich nicht)
    

    Wo liegt der Unterschied zwischen

    *sp = &s
    

    und

    sp = &s
    

    ??
    Also *sp beinhaltet die Addresse, gibt aber den Wert auch aus wenn man s mit * dereferenziert aber wo liegt da der Unterschied zu sp = &s ?? Hab gar nicht gewusst das man =& auch benutzen kann wenn man nicht den derefernzierungs Operator benutzt.Also könnte mir jemand mal erklären was es genau auf sich hat mit *sp oder nur sp?? 🙂

    -GhostzfaceChilla-



  • *sp = &s
    

    Falsch.

    string *sp = &s
    

    ist

    string *sp;//sp ist ein Zeiger auf string
    sp=&s;//sp ist die Adresse von s
    
    *sp = &s
    

    alleine geht gar nicht.



  • In Zeile 8 sollte s2 statt s stehen.



  • Voelleicht besser, man schreiobst

    string* sp = &s; // sp holds the address of s (ok ist klar)
    

    um zu sagen, sp hat den Typ string*



  • "sp" ist ein Zeiger - intern nur die Adresse einer anderen Variablen (bzw. von etwas vergleichbaren). Wenn du dem etwas zuweist, biegst du nur die Adresse um, der Wert, auf den der Zeiger vorher verwiesen hat, wird dadurch nicht beeinflußt.
    "*sp" ist der Wert hinter dem Zeiger (d.h. was immer an der Adresse aus sp liegt). Zugriffe darauf beeinflussen direkt das andere Objekt im Speicher.

    In deinem Beispiel gilt insbesondere:
    *sp = "goodby"; ändert die Variable, auf die sp gerade zeigt (d.h. im Moment s)
    sp = &s2; biegt den Zeiger um (danach wirken alle Zugriffe per *sp auf s2 und nicht mehr auf s)

    (und eine Anweisung *sp=&s; ist nicht zulässig wegen Typfehler)



  • Ich weiß nicht, welche Sachen Du bisher über Pointer gelernt hast.
    Manche Bücher erwecken einen sehr schrägen Eindruck.
    Sehr spaßig und korrekt(!) ist Pointer Fun with Binky.



  • volkard schrieb:

    /watch?v=6pmWojisM_E]Pointer Fun with Binky[/url].

    Ich würde das Video keinem Anfänger empfehlen. Es visualisiert zwar schön und lustig die Funktionsweise von zeigern, verwirrt aber auch (man hört nur pointer points to integers but pointee has to be set using the pointer assignment so the pointer can point point points pointee). Hab schon einfachere Erklärungen gesehen 😉



  • Also heißt das:
    Mit p weist man dem Zeiger selbst etwas zu, sprich einen neue Adresse/Variabel und mit *p weißt man der Adresse/Variable etwas zu, z.B einen neuen Wert etc. ??

    -GhostfaceChilla-



  • GhostfaceChilla schrieb:

    Also heißt das:
    Mit p weist man dem Zeiger selbst etwas zu, sprich einen neue Adresse/Variabel

    richtig

    und mit *p weißt man der Adresse/Variable etwas zu, z.B einen neuen Wert etc.

    Mit *p greift man direkt auf die Variable/den Speicherbereich zu, auf den der Zeiger zeigt, ja.


Anmelden zum Antworten