首頁 > 後端開發 > C++ > 為什麼修改`const`變數的記憶體位址顯示不同的值?

為什麼修改`const`變數的記憶體位址顯示不同的值?

Barbara Streisand
發布: 2024-12-20 18:58:10
原創
727 人瀏覽過

Why Does Modifying a `const` Variable's Memory Address Show Different Values?

理解變數和常數的記憶體位址行為

在涉及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
登入後複製

問題

我們為什麼觀察同一記憶體位址處的兩個不同值(22 和33) (0x22ff74)?

答案

與觀察相反,同一記憶體位址不存在兩個不同的值。這是編譯器最佳化的結果。

編譯器有權將任何提及 const 變數的行為視為直接使用該變數的編譯時值。在此程式碼中,編譯器將程式碼視為:

int * pN = const_cast<int*>(&22);
*pN = 33;
登入後複製

編譯器有權套用此最佳化。但是,需要注意的是,編譯器並不限於此操作。它可能會採用其他最佳化,包括如果您進行修改與 const 變數相關的記憶體等危險行為,則可能會刪除硬碟上的資料。

以上是為什麼修改`const`變數的記憶體位址顯示不同的值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板