Ein Gast namens M schrieb:
Hm... wie gesagt, das hatte mir nicht ganz eingeleuchtet...
const float konstante=3.14;
void foo(const float **a)
{
*a = &konstante; // Absolut legitim, den const float* auf einen const float zeigen zu lassen
}
int main()
{
float *pointer;
float **bar = &pointer; // Auch erlaubt.
foo(bar); // Das hier verbietet der Compiler normalerweise. Mal angenommen, es wäre erlaubt
// Dann zeigt *bar nun auf die Konstante.
// Das ist aber gerade pointer, welcher damit auch auf die konstante zeigt.
// Das heißt, sowohl:
*pointer = 3;
// als ach
**bar = 3;
// Würden die Konstante ändern!
}
Und versuch das bitte nicht durch irgendwelche Casts den Mechanismus auszuhebeln. Der ist zu deinem eigenen Schutz da. Klar kannst du den Compiler dazu zwingen, aber du nimmst dir dadurch die Warnung/Fehler für den Fall, dass du dann wirklich die Konstante änderst. Das Problem ist das Interface der Funktion. Entweder ist dies mit Absicht so gewählt und wenn du den Compiler mit Casts zu dieser Aktion zwingst geht es schief. Oder es ist schlecht gewählt und du solltest es ändern.