同じメモリ アドレスでの異なる値
多くの初心者プログラマは、複数の変数が同じメモリで異なる値を持つように見えるという直感に反する現象に遭遇します。住所。この記事では、この現象を説明するための基礎となるメカニズムを掘り下げ、誤解を払拭します。
次のコード スニペットを考えてみましょう。
const int N = 22; int *pN = const_cast<int *>(&N); *pN = 33;
このコードは、新しい値 (33) をポインタ (pN) を介して定数変数 N に渡します。困惑することに、N と *pN の両方を出力すると、それらが異なる値を持つことがわかります。N は 22 のままですが、*pN は変更された値 33 を保持します。
この現象を理解する鍵は、コンパイラの最適化にあります。この場合、コンパイラは、コンパイル時の値をコードに直接置き換えることによって const 宣言を最適化することができます。その結果、*pN を介して N を変更しようとしても、コンパイラーはプログラム全体で N を 22 として扱います。
コンパイラーはそのようなことを行う義務はないことに注意することが重要です。最適化。一部のコンパイラは const 宣言を厳密に扱い、書き込もうとするとエラーを生成する場合があります。さらに、コンパイラは、プログラマが不要と判断したコードを削除するなど、プログラマを驚かせるようなさらなる最適化を適用することができます。
同じメモリ アドレスに 2 つの異なる値が存在すると認識される場合は、次のように解決されます。コンパイラの最適化を理解します。コンパイラーは、コンパイル時の知識を使用して、プログラマーにはすぐには分からない方法でコードを最適化できます。ただし、堅牢で効率的なコードを作成するには、これらの最適化の制限と潜在的な結果を理解することが不可欠です。
以上が複数の変数が同じメモリ アドレスに異なる値を保持しているように見えるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。