2014-12-07 85 views
-1

有人給我看了下面的代碼片段,並問是什麼事應該輸出C++,如何做兩個指向同一位置值不同

#include <iostream> 
using namespace std; 

int main() { 
    const int value = 10; 
    int* p = (int*)&value; 
    *p = 20; 

    cout << value << " " << *p << endl 
     << &value << " " << p << endl; 

    return 0; 
} 

正如你可以看到,有一個不變value是10,並有一個指向p的指針指向值的地址,然後指向的地址得到一個不同的值。

我預計打印的程序20 20but it actually prints 10 20.
它也顯示這兩個貴重物品有相同的地址。有人可以解釋幕後發生了什麼嗎?

+5

未定義的行爲...? – 2014-12-07 03:45:06

+0

@remyabel也許但發生了什麼? – qwertymk 2014-12-07 03:45:51

+0

請參閱[如何在同一地址產生2個不同值的變量?](http://stackoverflow.com/q/22656734/1708801)...試圖修改一個const對象是未定義的行爲這個問題可能是重複的。 – 2014-12-07 03:46:20

回答

3

未定義的行爲和優化編譯器。編譯器知道從value的聲明,value的價值絕不會在一個結構良好的程序改變,所以它優化了其中value的價值將被檢查的位,只是取值它知道value了。

至於地址,你永遠不會拿到地址p,並且p是相同的&value並不令人感到意外,因爲你以前幾行的方式分配它。

相關問題