Zeiger < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 13:44 Sa 25.01.2014 | Autor: | rollroll |
Aufgabe | Die Deklarationen von y und z lauten
int const * y;
int * const z;
Welche der folgenden Operationen ist nicht erlaubt?
*(y++)
(*y)++
(*z)++
(*z)+=(*y)
(*y)+(*z) |
Es ist doch:
y ist ein Zeiger auf einen konstanten Wert
z ist ein konstanter Zeiger auf einen Wert
Also müsste doch alles außer (*y)++ nicht erlaubt sein.
Denn bei (*y)++ wird doch der Zeiger um 1 erhöht. Das ist ja erlaubt, weil y kein konstanter Zeiger ist.
Laut Lösung ist aber nur (*y)++ nicht erlaubt.
Weitere Frage:
Die Deklaration von y ist int const * const y;
Welche der Operationen ist erlaubt?
y++
(*y)++
(*y)+1
y=y+4
(*y)=(*y)+4
Lösung: Erlaubt ist (*y)+1. Aber warum. y ist doch ein konstanter Zeiger, der wird doch hier verändert, oder?
|
|
|
|
Hallo!
Zur ersten Frage:
y ist der Zeiger. *y ist der Wert dahinter., und der ist konstant.
Daher ist (*y)++ nicht erlaubt, weil du damit den konstanten Wert erhöhen willst.
*(y++) ist erlaubt, denn es liefert dir den wert, und danach wird der (nicht konstante) Zeiger erhöht.
Zur zweiten Frage:
Ja, sowohl der Zeiger als auch der Wert dahinter ist konstant, du kannst keines von beidem ändern.
Aber wenn du a=*y+1 schreibst, ist a um 1 größer als der Wert von y, aber y selbst (weder Zeiger noch Wert) wird dabei verändert.
|
|
|
|