zeiger ?



  • hallo leute!

    vielen dank nochmal dass ihr mir bei dem problem mit dem bubblesort geholfen habt. aber ich bin jetzt wieder in meinem c++ buch ( und man kann es als wunder bezeichnen dass ich freiwillig lese 😃 ) auf der seite mit die zeiger angelangt. ich lese das buch schon zum 2-mal und jetzt komm ich seit die zeiger scho wieder nich mehr ganz klar.
    deshalb wollt ich euch fragen ob mir das jemand ( oder mehrere) das kapitel mal mit eigenen worten erklären kann 😕

    thx schon mal

    foxtrott



  • Hallo,

    "Zeiger" ist ein Recht großes Kapitel.

    Was genau begreifst du denn nicht?

    mfg kaffee



  • Also ein Zeiger ist ganz einfach das, was der Name schon sagt. 😉

    Ich weiss jetzt nicht, welches Buch du liest, aber das kann man eigl. ganz einfach erklären.

    int i = 2;
    

    Das ist ja ein Integer mit einer physikalischen Stelle im Speicher.

    Ein Zeiger zeigt jetzt genau auf diese Stelle im Speicher.

    int* pi = &i;
    

    Der * zeigt dir an, dass pi ein Zeiger auf den Datentyp int ist. (Ein Zeiger hat aber immer die gleiche Grösse, egal auf was für ein Objekt es zeigt. Darum kann man den auch recht einfach casten und es reicht bei Zeigern in einem Objekte, wenn man forward-decleration macht, aber das ist jetzt nicht so wichtig.;))

    Der & gibt dir die Adresse des Objektes aus. Nun beinhaltet der Zeiger (pi) lediglich die Adresse von i.

    Nun können wir mittels des Zeigers direkt auf den Speicher, auf den er zeigt zugreifen.

    *pi = 22;
    

    Mit dem Dereferenzierungsoperator '*' kannst du auf das Objekt zugreifen, als ob du es direkt benutzt.

    Bei Zeigern auf Objekte mit Memberfunktionen kannst du mittels des -> Operators direkt auf die Funktionen zugreifen.

    class foo{
        void bar (){}
    };
    
    ...
    
    foo f;
    foo* pf = &f;
    
    pf->bar (); //bedeutet (hier) das gleiche, wie:
    (*pf).bar (); //und das hat die gleiche auswirkung, wie:
    f.bar ();
    

    Noch weitere Fragen? Oder was ist unverständlich?



  • danke schon mal.

    alsoo mal zur frage welches buch ich lese: einstieg in c++ von Arnold Willemer (Galileo Computing)

    am anfang wars eh noch einfach. ein zeiger speichert einfach die adresse einer anderen variable. nur als dann später das anfordern von speicher mit "new" und verkette listen kamen hats bei mir ausgesetzt. aber wo ich dann beschlossen hab, das buch nocheinmal von vorne zu lesen war, als die funktionen kamen mit zeiger als parameter 😞 😕 .

    vielleicht ist der autor einfach nicht dazu bestimmt worden jemanden etwas beizubringen.

    und da ich gerade die seiten nachgeblättert hab was ich nicht versteh, is mir noch das thema "rekursive Funktionen" ins auge gesprungen, das ja an und für sich nicht so schwer ist. aber kann mir jemand sagen was ein "binärer baum" ist?



  • Also nur mit der Ruhe. Alles Stück für Stück. 😉
    Ein binärer Baum ist schon was fortgeschritteneres.. http://de.wikipedia.org/wiki/Binärbaum

    Aber noch mal zu den Zeigern.

    Der Vorteil, den man bekommt, wenn man Zeiger als Parameter in einer Funktion haben sind folgende:
    - Es muss lediglich eine Grösse von einem Zeiger kopieren (i.d.R 4 Byte), was besonders bei grossen Objekten Geschwindigkeitsvorteile bringt.
    - Das Objekt, dass sich ausserhalb der Funkiont befindet kann direkt verändert werden durch die Funktion, ohne dass etwas über Rückgabewerte gemacht werden muss.

    class foo{ //riesiges Objekt
       void foobar ();
    ...
    }
    
    void bar (foo* f) //toll, wes müssen nur 4 byte kopiert werden 
    {
        f->foobar (); //mit dem -> Operator kann auf die memberfunktion zugegriffen werden.
    
        (*f).foobar (); //bedeutet das gleiche, wie oben    
    }
    


  • lol. is ja irgendwie logisch dass man zeiger verwendet um speicher zu sparen xD.
    aber jetzt wird mir auch schon einiges klarer.
    vieln dank.


Anmelden zum Antworten