同一位址處的變數產生不同的值
考慮以下程式碼片段:
#include <iostream> using namespace std; int main(void) { const int a1 = 40; const int* b1 = &a1; char* c1 = (char *)(b1); *c1 = 'A'; int *t = (int*)c1; cout << a1 << " " << *t << endl; cout << &a1 << " " << t << endl; return 0; }
此程式碼命令人驚訝地輸出:
40 65 0xbfacbe8c 0xbfacbe8c
變數怎麼可能同一位址的a1會產生兩個不同的值,40 和 65?
答案:
此行為是未定義行為的結果。程式碼修改了 const 變數 (a1) 的值,違反了 C 的規則。根據 C 標準(第 7.1.6.1 節第 4 段),任何在其生命週期內修改 const 物件的嘗試都會導致未定義的行為。
在這種情況下,透過指標 c1 修改 const 變數 a1 會導致不可預測的結果。編譯器可能會以記錄的方式忽略修改、行為,甚至終止程式。
因此,觀察到的行為(其中 a1 產生兩個不同的值)是未定義行為的結果。強烈建議不要修改 const 變量,這可能會導致不可預測和錯誤的程式行為。
以上是為什麼同一記憶體位址的 const 變數在 C 中顯示不同的值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!