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.
-
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.
-
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