Was nützen *Pointer?



  • mit dem "/" meine ich einen divisions operator ^^



  • ich versteh folgende 2 kontrukte noch nicht;/

    int* foo::operator->() 
    { 
           return &(ptr->val); 
    }
    

    mit &(ptr->val) bekomm ich die adresse?

    Node*& findPlaceToInsertOrReplace(double x){ 
         ... 
         return &a;   <--- adresse des pointers? 
    }
    

    adresse auf referenz auf pointer? wie sagt man dass;)
    wie muss hier noch der funktionsaufruf aussehen?
    ...bei nem array weiss ich auch das ein arr[i] das gleich ist wie ein *&arr[i]



  • asking a question schrieb:

    mit dem "/" meine ich einen divisions operator ^^

    Man kann Zeiger nicht durcheinander teilen.



  • ptr schrieb:

    wie muss hier noch der funktionsaufruf aussehen?

    ich denke da an sowas:

    Node*& t=findPlaceToInsertOrReplace(3.14);
    t=new Node(t->next,2.71);
    

  • Administrator

    Jester schrieb:

    asking a question schrieb:

    mit dem "/" meine ich einen divisions operator ^^

    Man kann Zeiger nicht durcheinander teilen.

    Wieso nicht?

    CObject *pOne, *pTwo; // Zwei Zeiger
    int x = reinterpret_cast<int>(pOne);
    int y = reinterpret_cast<int>(pTwo);
    int r = x / y;
    CObject *pResult = reinterpret_cast<CObject*>(r);
    

    Wird bis auf ein paar Warnmeldungen und einigen seltsamen Blicken aktzeptiert. Der Verwendungszweck dabei bleibt mir allerdings auch schleierhaft ^^

    Grüssli



  • Und jetzt zeig mir bitte noch die Zeile in dem Beispiel in der Du zwei Zeiger teilst 😃


  • Administrator

    LordJaxom schrieb:

    Und jetzt zeig mir bitte noch die Zeile in dem Beispiel in der Du zwei Zeiger teilst 😃

    Man nicht so pingelig ^^ ... ich teile den Wert der Adresse. Ob jetzt die Adresse in einem Integer gespeichert ist oder in einem Pointer spielt ja nicht so eine grosse Rolle. Die Zahl/Der Wert dahinter sollte gleich bleiben ^^

    Grüssli



  • sorry, was ich meinte war viell kann ich zb ne iteration machen ohne die variable zu überschrieben und ne anderen zu verwenden sorich mit zeigern.



  • Dravere schrieb:

    ich teile den Wert der Adresse. Ob jetzt die Adresse in einem Integer gespeichert ist oder in einem Pointer spielt ja nicht so eine grosse Rolle. Die Zahl/Der Wert dahinter sollte gleich bleiben ^^

    Strenggenommen ist nichtmal garantiert, dass Dein Pointer in einen signed int überhaupt reinpasst (spätestens bei x64 unter VC++ ist das imho nicht mehr der Fall). Und selbst wenn, würden die unsigned Adressen im signed int wenn das höchstwertige Bit gesetzt ist nicht so teilen, wie Du vermutlich erwartest 😉


  • Administrator

    dann nehmen wir halt

    __int64
    

    Aber mir ist schon klar, dass es eigentlich nicht so ganz dasselbe ist. Aber es ist ja auch unnötig darüber weiterzudiskutieren, da es völliger Quatsch ist ^^

    @ "asking a question"
    Inkrementieren eines Pointers geht. Bzw. auch dekrementieren. Also:

    int *p; // Einen Zeiger
    ++p; // Funktioniert
    --p; // Funktioniert auch
    

    Grüssli



  • volkard schrieb:

    C++Progger schrieb:

    aber dass Experten sie lieben.

    das war vermutlich einer, der erst seit 3 jahren c++ kann und sich als experte fühlt. keine bange, wenn der erste entdeckerstolz verraucht ist, wird er wieder umschwenken und pointer und referenzen meiden (außer in trivialen fällen wie übergabeparameter auf 4 bytes schrumpfen).

    😕
    Pointer = Indirektion = extrem wichtiges Mittel in der Programmierung. Irgendwie erscheint mir das Verständnis von Pointern (und damit meine ich jetzt nicht unbedingt die konkrete C-Inkarnation) *extrem* wichtig zu sein und man sollte schon gut unterscheiden zwischen der sinnlosen Verwendung von Pointern in C++ (dynamische Objektallokation statt Stackobjekte, zuviele nackte Pointer, Arrays statt Container, keine Referenzen...) und der sinnvollen Anwendung des Pointer-Konzepts (z.B. in Datenstrukturen und Algorithmen).



  • akari schrieb:

    Hallo

    Pointer braucht man bei dynamischer Speicherverwaltung.

    bis bald
    akari

    ... und, wenn man Laufzeit-Polymorphie nutzen will (sprich: Ausnutzen, dass man einen "Mercedes" wie jedes andere "Auto" behandeln kann). 😉
    (Geht mit Referenzen natürlich genauso)

    Gruß,

    Simon2.


Anmelden zum Antworten