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

為什麼同一記憶體位址的 const 變數在 C 中顯示不同的值?

Barbara Streisand
Barbara Streisand原創
2024-11-28 17:26:14831瀏覽

Why Does a Const Variable at the Same Memory Address Show Different Values in C  ?

同一位址處的變數產生不同的值

考慮以下程式碼片段:

#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中文網其他相關文章!

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