Warum geht das nicht?
-
Warum geht das hier nicht?
int i; const int* i1 = &i; int* i2 = i1;
Denn das hier geht:
int i; const int i1 = i; int i2 = i1;
thx
-
Casten der Variablen bringt den Compiler dazu, dass er sich nimmer aufregt.
int i; const int* i1 = (const int*)&i; int* i2 = (int*)i1;
-
Aber WARUM ist das so?
-
/*ganz normale int Variable wird im speicher angelegt*/ int i; /*nun definierst du einen zeiger, der auf einen speicherplatz zeigt, wo ein const int liegt. &i ist aber ein speicherbereich wo ein normaler int liegt. mit dem cast sagst du nun explizit, dass der speicherbereich als const int interpretiert werden soll, der compiler glaubt dir das, die verantwortung dass das stimmt liegt bei dir und nimmer beim compiler.*/ const int* i1 = (const int*)&i; /*gleiches spielchen hier, der zeiger muss auf int zeigen, dort liegt aber ein const int, daher wieder casten.*/ int* i2 = (int*)i1;
-
dgdfgdfgdfgf schrieb:
Warum geht das hier nicht?
int i; // Ein Zeiger auf ein konstantes int. D.h. der Wert von i darf nicht über den // derefenrenzierten Zeiger i1 gändert werden. // Beispiel: *i1 = 3 -> Fehler const int* i1 = &i; // Hier wird versucht, den Zeiger auf const int i1 dem Zeiger auf int // i2 zuzuweisen. // Das geht nicht, weil man dann plötzlich i wieder ändern könnte. Und zwar über *i2, obwohl der i1 das eigentlich nicht zulässt. int* i2 = i1;
Denn das hier geht:
int i; // hier wird ein neuer int-Wert i1 angelegt, der konstant ist (eine Kopie von i) const int i1 = i; // hier wird wieder ein neuer int Wert i2 angelegt, der eine Kopie von i1 ist // i1 bleibt trotzdem wie er ist. int i2 = i1;
thx