首頁 >後端開發 >C++ >為什麼C語言中同一記憶體位址的變數輸出不同的值?

為什麼C語言中同一記憶體位址的變數輸出不同的值?

Patricia Arquette
Patricia Arquette原創
2024-12-03 03:44:09190瀏覽

Why Do Variables at the Same Memory Address Output Different Values in C  ?

具有相同位址的變數輸出不同的值

考慮以下程式碼片段:

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;

令人驚訝的是,這段程式碼輸出:

40 65
0xbfacbe8c 0xbfacbe8c

相同位址(c1 和t)的變數如何產生兩個不同的值('A' 和 65)?

解釋在於未定義行為的本質。在這種情況下,常數變數 (*c1) 的修改會觸發未定義的行為。根據 C 標準,未定義的行為可能會導致不可預測的結果,從程序終止到記錄的行為(有或沒有診斷訊息)。

在這個特定實例中,未定義的行為允許編譯器最佳化程式碼一種意想不到的方式。透過修改常數變量,編譯器有效地覆寫了 a1 的原始值。但是,需要注意的是,這種行為是無法保證的,並且可能會因不同的編譯器和環境而有所不同。

因此,在使用常數變數和指標時,避免修改這些變數以確保程式的可預測性至關重要行為。

以上是為什麼C語言中同一記憶體位址的變數輸出不同的值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn