非 const ポインタを使用して「const」値を変更すると、未定義の動作が発生するのに、ポインタと元の変数に異なる値が出力されるのはなぜですか?

Barbara Streisand
リリース: 2024-10-28 04:47:02
オリジナル
226 人が閲覧しました

Why does modifying a `const` value through a non-const pointer lead to undefined behavior but still print different values for the pointer and the original variable?

非 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 値を変更すると、未定義の動作領域に入ります。ただし、推測するには:

  • (3) および (4): *w は実行時に評価され、e はコンパイル時の定数として扱われます。したがって、出力される値は異なります。

以上が非 const ポインタを使用して「const」値を変更すると、未定義の動作が発生するのに、ポインタと元の変数に異なる値が出力されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!