allgemeine Frage zu pointern



  • Hallo,

    ich steige gerade auf c++ um und habe bisher mit Java programmiert. Inzwischen habe ich verstanden wie ich pointer verwenden kann und wie sie funktionieren, allerdings verstehe ich noch nicht wann und wozu ich sie verwenden soll.

    Ich konnte bisher kein Tutorial finden, in dem der Sinn von Pointern erläutert wird, lediglich wie sie funktionieren und wie man sie nutzt.

    Wenn mir jemand das erklären könnte, wäre ich sehr dankbar.

    Gruß moccajoghurt



  • Pointer machen genau das, was du auch in Java machst, wenn du mit Objekten arbeitest. Es fehlt nur der Garbagecollector. Interessanter ist für dich die Frage, was die Nichtpointertypen machen. Dazu solltest du allerdings ein Buch lesen (nicht C++ von A bis Z). Mit der Suchfunktion kannst du Forenbeiträge finden, in denen verschiedene Bücher empfohlen werden.



  • Nun, du wirst schon merken, wenn du einen Pointer brauchst. Wenn du sie nicht brauchst, dann benutze sie nicht. Benutze Referenzen und Objekte.

    In Java werden alle Objekte mittels Referenzen angesprochen, welche den Pointern von C++ nicht unähnlich sind. Zum Bleistift:

    public class Foo
    {
        public int Bar;
        public static void setBarForFoo(Foo foo, int Bar) {
            foo.Bar = Bar;
        }
    }
    
    struct Foo
    {
        int Bar;
        static void setBarForFoo(Foo foo, int Bar)
        {
            foo.Bar = Bar; // Bedeutungslos, da foo eine Kopie ist und keine Referenz oder ein Pointer.
        }
        static void setBarForFoo(Foo *foo, int Bar)
        {
            foo->Bar = Bar; // Jetzt ist das Verhalten wie im Java Beispiel oben.
        }
    };
    

    Dann hast du eine Methode, wo das wie folgt genutzt wird:

    public static void main(String[] args) {
        Foo foo = new Foo();
        Foo.setBarForFoo(foo, 42);
        System.out.println(foo.Bar); // 42 auf der Konsole.
    }
    
    int main()
    {
        // $EDIT$: Ich habe zu viel Java programmiert, der Stil wird immer mieser lol
        Foo foo;
        Foo::setBarForFoo(foo, 42); // Hier passiert eigentlich gar nichts, da eine Kopie von foo übergeben und verändert wird.
        cout << foo.Bar << endl; // Hier kommt nicht 42 raus...
        Foo::setBarForFoo(&foo, 42); // Hier wird 42 in das foo geschrieben, da ein Zeiger auf das lokale foo übergeben wird.
        cout << foo.Bar;
    }
    

    MfG





  • Vielen Dank für deine Beispiele /rant/, die waren sehr hilfreich für das Verständnis!
    Die Links werde ich mir auch merken.
    👍


Anmelden zum Antworten