」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 為什麼透過非常量指標修改「const」變數看起來有效,但實際上並沒有改變它的值?

為什麼透過非常量指標修改「const」變數看起來有效,但實際上並沒有改變它的值?

發佈於2024-11-07
瀏覽:326

Why Does Modifying a `const` Variable Through a Non-Const Pointer Seem to Work, but Doesn\'t Actually Change Its Value?

透過非常量指標修改 const

在 C 中,const 變數一旦初始化就無法修改。但是,在某些情況下,const 變數可能會被更改。考慮以下代碼:

const int e = 2;

int* w = (int*)&e;        // (1)
*w = 5;                   // (2)

cout 

如果執行此程式碼,您會注意到意外行為:

5
2

即使在(2)中*w被改為5,e仍然保持其原始值2。這種看似矛盾的行為源自於以下因素:

  • (1 ) 取消引用常數指標 (w) 允許進行修改。
  • (2) 修改後的值儲存在 w 指向的記憶體位置,在本例中是儲存 e 的記憶體位置。
  • 但是,編譯器優化了程式碼,將 e 視為編譯時常數,而不是在運行時對其求值。

因此,當 *w 在運行時求值時,它會傳回修改後的值 (5)。但是,當在編譯時計算 e 時,將使用其原始值 (2)。

此行為在 C 稱為未定義行為。直接或間接修改const變數會導致不可預測的後果,在這種情況下應謹慎行事。

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3