Was ist der Zweck von const Qualifier, wenn ich es durch einen Zeiger in C ändern kann? [Duplikat]

7

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.

    
infinitloop 30.01.2011, 05:55
quelle

2 Antworten

12

Der Grund, warum Sie den Wert ändern könnten, ist, dass Sie eine Pointer-Typumwandlung vorgenommen haben, die const ness entfernt hat:

%Vor%

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.

    
templatetypedef 30.01.2011, 06:00
quelle
9
  

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 .

    
SiegeX 30.01.2011 06:00
quelle

Tags und Links