変数と定数によるメモリ アドレスの動作を理解する
const 変数とそのポインターを含むコード スニペットでは、異なる同じメモリアドレスの値が発生する質問。
#include <iostream> using namespace std; int main() { const int N = 22; int * pN = const_cast<int*>(&N); *pN = 33; cout << N << '\t' << &N << endl; cout << *pN << '\t' << pN << endl; }
22 0x22ff74 33 0x22ff74
なぜ2 つの異なる値 (22 と 33) を同時に観察しますメモリ アドレス (0x22ff74)?
観察に反して、同じメモリ アドレスに 2 つの異なる値が格納されているわけではありません。これはコンパイラの最適化の結果です。
コンパイラには、const 変数への言及を、その変数のコンパイル時の値が直接使用されているかのように扱う権限があります。このコードでは、コンパイラはコードを次のように表示します。
int * pN = const_cast<int*>(&22); *pN = 33;
コンパイラは、この最適化を適用する権限を持っています。ただし、コンパイラはこのアクションに限定されないことに注意することが重要です。 const 変数に関連付けられたメモリの変更などの危険な行為を行った場合、ハード ドライブ上のデータが消去される可能性があるものなど、他の最適化が採用される場合があります。
以上が「const」変数のメモリアドレスを変更すると異なる値が表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。