非 const ポインターを使用した const の変更
次のコードを考えてみましょう。
<code class="cpp">const int e = 2; int* w = (int*) &e; // (1) cast to remove const-ness *w = 5; // (2) cout << *w << endl; // (3) outputs 5 cout << e << endl; // (4) outputs 2 cout << "w = " << w << endl; // (5) w points to the address of e cout << "&e = " << &e << endl;</code>
In (1 )、w は e のアドレスを指します。 (2)ではその値を5に変更していますが、*wとeの値が表示されるとそれぞれの値が異なります。しかし、ポインタ w と e のアドレスを出力すると、それらは同じ値になります。
e が 5 に変更されたとしても、なぜ 2 が残っているのでしょうか?別の場所に保管されていたのでしょうか?それとも一時的なものですか?しかし、なぜ w が指す値は e のアドレスのままなのでしょうか?
答え
const 値を変更すると、未定義の動作領域に入ります。ただし、推測するには:
以上が非 const ポインタを使用して「const」値を変更すると、未定義の動作が発生するのに、ポインタと元の変数に異なる値が出力されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。