Hallo,
Wenn ich eine Konstante durch einen Zeiger ändern kann, was ist dann der Zweck? Unten ist Code:
%Vor%AUSGABE:
Vorher: 10
Nachher: 2
Drücken Sie eine beliebige Taste, um fortzufahren . . .
Verwenden von Visual Studio 2008.
Der Grund, warum Sie den Wert ändern könnten, ist, dass Sie eine Pointer-Typumwandlung vorgenommen haben, die const
ness entfernt hat:
Dieser Typ gibt eine const int*
(nämlich &a
) an eine int *
weiter, sodass Sie die Variable frei ändern können. Normalerweise warnt der Compiler Sie davor, aber die explizite Typumwandlung unterdrückt die Warnung.
Der Hauptgrund hinter const
ist, dass Sie nicht versehentlich etwas modifizieren, was Sie versprochen haben. Es ist nicht unantastbar, wie Sie gesehen haben, und Sie können const
ness ungestraft wegwerfen, ähnlich wie Sie andere unsichere Dinge wie das Konvertieren von Zeigern in ganze Zahlen oder umgekehrt tun können. Die Idee ist, dass Sie versuchen sollten, sich nicht mit const
zu vermischen, und der Compiler wird Sie warnen, wenn Sie dies tun. Natürlich sagt das Hinzufügen eines Cast dem Compiler "Ich weiß, was ich mache", und in diesem Fall erzeugt das obige keine Art von Warnungen.
Wenn ich eine Konstante durch a modifizieren kann Zeiger dann was ist der Zweck von es? Unten ist Code:
Dies ist ein undefiniertes Verhalten und sollte um jeden Preis vermieden werden:
§ C99 6.7.3p5
Wenn versucht wird, ein Objekt definiert mit einem Const-qualifiziert Geben Sie durch Verwendung eines Lvalue mit ein nicht konformen Typ, der Verhalten ist nicht definiert .
Tags und Links c const pointers qualifiers