透過非常量指標修改 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