Frage zu Zeigern



  • Ich habe folgende Werte:

    int a=2, b=5, *c=&a, *d=&b;

    folgende Anweisung:
    *d =d*-3;

    Warum beträgt der Wert der Variable b nun 2? Zwar zeigt der Zeiger d auf b und die Berechnung d*-3 wird auf d wieder referenziert aber warum ändert sich dann der Wert b auch auf 2?



  • Gegenfrage: Was hättest du denn erwartet?
    Du meintest sicher:

    *d=*d-3;
    

    Das wird normalerweise kürzer (und mit etwas mehr Erfahrung auch besser lesbar)

    *d-=3;
    

    geschrieben.
    Dadurch wird der (Stack-) Speicher, den b belegt, direkt manipuliert. Durch Dereferenzierung wird der (int-) Wert an dieser Speicherstelle (5) mit 3 subtrahiert -> 2.



  • Ich hätte erwartet dass nur b den Wert dauerhaft manipulieren kann und d* dass nur temporär sobald die Anweisung fertig ist.



  • Du kommst irgendwie mit dem * durcheinander.

    Je nachdem wo der beim Bezeichner steht, hat er eine andere Bedeutung.

    d zeigt auf b. Wenn du also über d etwas an b manipulierst, dann passiert das bei b.


  • Mod

    Defcon85 schrieb:

    Ich hätte erwartet dass nur b den Wert dauerhaft manipulieren kann und d* dass nur temporär sobald die Anweisung fertig ist.

    Tja, ist halt nicht so. Wieso sollte das auch so sein? Abgesehen von technischen Schwierigkeiten, wie man so etwas umsetzen würde: Wozu sollte so eine Funktionalität gut sein? Änderungen, die sofort verworfen werden, kann man schließlich viel einfacher haben, indem man einfach nichts ändert.



  • Defcon85 schrieb:

    Ich habe folgende Werte:

    int a=2, b=5, *c=&a, *d=&b;

    folgende Anweisung:
    *d =d*-3;

    Warum beträgt der Wert der Variable b nun 2? Zwar zeigt der Zeiger d auf b und die Berechnung d*-3 wird auf d wieder referenziert aber warum ändert sich dann der Wert b auch auf 2?

    meldet dein compiler keine warnings? du nimmmst die adresse von d, multiplizierst die mit -3. und dann wird si b (*d) gespeichert. sollte gewiss warnings geben.


  • Mod

    Fricky667 schrieb:

    Defcon85 schrieb:

    Ich habe folgende Werte:

    int a=2, b=5, *c=&a, *d=&b;

    folgende Anweisung:
    *d =d*-3;

    Warum beträgt der Wert der Variable b nun 2? Zwar zeigt der Zeiger d auf b und die Berechnung d*-3 wird auf d wieder referenziert aber warum ändert sich dann der Wert b auch auf 2?

    meldet dein compiler keine warnings? du nimmmst die adresse von d, multiplizierst die mit -3. und dann wird si b (*d) gespeichert. sollte gewiss warnings geben.

    Ich vermute eher ein Copy&Paste-Problem, bzw. das Problem ist das Nicht-Benutzen von Copy&Paste. Der TE ist offensichtlich nicht fit genug in Zeigersyntax, um im Foreneditor korrekten Code zu produzieren.



  • SeppJ schrieb:

    Fricky667 schrieb:

    Defcon85 schrieb:

    Ich habe folgende Werte:

    int a=2, b=5, *c=&a, *d=&b;

    folgende Anweisung:
    *d =d*-3;

    Warum beträgt der Wert der Variable b nun 2? Zwar zeigt der Zeiger d auf b und die Berechnung d*-3 wird auf d wieder referenziert aber warum ändert sich dann der Wert b auch auf 2?

    meldet dein compiler keine warnings? du nimmmst die adresse von d, multiplizierst die mit -3. und dann wird si b (*d) gespeichert. sollte gewiss warnings geben.

    Ich vermute eher ein Copy&Paste-Problem, bzw. das Problem ist das Nicht-Benutzen von Copy&Paste. Der TE ist offensichtlich nicht fit genug in Zeigersyntax, um im Foreneditor korrekten Code zu produzieren.

    der foreneditor macht aus *d ein d*, wenn einer c+p verwendet, oder wie ist das zu verstehen?
    ach so: 'nichtbenutzen', okay 😃


Anmelden zum Antworten