[Zeigerarithmetik] Wert setzen



  • Ich habe eine Klasse, die einen Zeiger auf einen int enthaelt.

    class MyClass
    {
    public:
        void setValue(const int* a);
    private:
        int* a_:
    }
    

    Muss ich den setter so:

    void MyClass::setValue(const int* a)
    {
        *a_=*a;
    }
    

    oder so

    void MyClass::setValue(const int* a)
    {
        a_=a; 		
    }
    

    implementieren?



  • die zweite variante ist richtig.



  • warum?



  • Raptor schrieb:

    warum?

    bei der ersten wird über die pointer schon zugegriffen. stürzt bestimmt ab.

    int *a;            // ein int-pointer
    a = (int*)0x10000; // dem pointer einen inhalt geben
    *a = 0x1234;       // den wert 0x1234 an die adresse 0x10000 schreiben
    

    btw: in deinem fall wär vielleicht ein neuer 'operator=' ganz gut



  • Im ersten Fall weist du den Inhalt des Zeigers zu, im zweiten Fall, wie
    beabsichtigt, den Zeiger selbst.



  • naja welche variante richtig ist, hängt davon ab, ob er den zeiger kopieren will, oder den inhalt des zeigers oo

    außerdem muss es

    void MyClass::setValue(int* const a)
    {
        a_=a;         
    }
    

    heißen ..



  • life schrieb:

    außerdem muss es

    void MyClass::setValue(int* const a)
    {
        a_=a;         
    }
    

    heißen ..

    Nö, wieso?
    Wenn du allerdings darauf hinweisen wolltest, dass ein Zeiger auf const int nicht einfach einem Zeiger auf int zugewiesen werden kann, dann liegst du richtig.



  • Nö, wieso?

    ein Zeiger auf const int nicht einfach einem Zeiger auf int zugewiesen werden kann

    ein konstanter Zeiger auf int hingengen kann einem nicht konstanten Zeiger auf int zugewiesen werden und den zeiger in der settermethode konstant zu machen, macht sogar ein wenig sinn..
    natürlich kannste auch das const ganz weglassen, wenns dir lieber ist 🙄


Anmelden zum Antworten