Ändern einer Konstante durch einen Nicht-Konstanten-Zeiger
In C kann eine Konstantenvariable nach der Initialisierung nicht mehr geändert werden. In bestimmten Szenarien kann es jedoch so aussehen, als ob eine Konstantenvariable geändert wurde. Betrachten Sie den folgenden Code:
<code class="cpp">const int e = 2; int* w = (int*)&e; // (1) *w = 5; // (2) cout << *w << endl; // (3) cout << e << endl; // (4)</code>
Wenn Sie diesen Code ausführen, werden Sie ein unerwartetes Verhalten bemerken:
5 2
Auch wenn *w in (2) in 5 geändert wurde, e behält immer noch seinen ursprünglichen Wert von 2. Dieses scheinbar paradoxe Verhalten ist auf die folgenden Faktoren zurückzuführen:
Wenn *w zur Laufzeit ausgewertet wird, gibt es daher den geänderten Wert (5) zurück. Wenn e jedoch zur Kompilierungszeit ausgewertet wird, wird sein ursprünglicher Wert (2) verwendet.
Dieses Verhalten wird in C als undefiniertes Verhalten bezeichnet. Das direkte oder indirekte Ändern einer const-Variable führt zu unvorhersehbaren Konsequenzen, und in solchen Situationen ist Vorsicht geboten.
Das obige ist der detaillierte Inhalt vonWarum scheint das Ändern einer „const'-Variablen über einen Nicht-Const-Zeiger zu funktionieren, ändert aber nicht tatsächlich ihren Wert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!