[英]What is the behaviour when we assign constant integer reference to a integer pointer in c++?
請查看以下代碼。 我將一個const整數值的地址分配給了一個整數指針。 而且我也可以打印那些地址,但是我不能打印這些值(注釋行)。 有人可以解釋一下內部實際發生的事情嗎?
int main()
{
int *a;
cout<<a<<"\n";
a = (int*)20;
cout<<a<<"\n";
cout<<(int*)20<<"\n";
int *b;
cout<<b<<"\n";
b = (int*)20;
cout<<b<<"\n";
//cout<<*a<<"\n";
//cout<<*b<<"\n";
return 0;
}
Output:
-------
0
0x14
0x14
0x7fff3c914690
0x14
您沒有分配const整數值的地址。 相反,您說的是“將地址當作地址20”,即(int*)20
。 因此,當您取消引用它時(即*a
),您說的是地址20上的內容,那當然是垃圾。 您需要在獲取地址之前將20存儲在某個地方。
const int value = 20;
const int * a = &value;
cout << *a << endl;
會...
讓我們逐行瀏覽一下:
int *a;
這將使用當時恰好在內存中的隨機數據初始化一個指向int的指針。
cout<<a<<"\n";
打印內存地址a
成立,這是隨機的,因為它沒有初始化。
a = (int*)20;
把20
作為含有一個int的存儲器地址,並且使得a
點到該存儲器地址(這又包含隨機垃圾數據)。
cout<<a<<"\n";
輸出a
持有的地址,即20
。
cout<<(int*)20<<"\n";
輸出20
作為內存地址。
int *b;
cout<<b<<"\n";
b = (int*)20;
cout<<b<<"\n";
同有a
,見上面。
cout<<*a<<"\n";
cout<<*b<<"\n";
這兩個將取消引用地址20
處的內存,這將導致未定義的行為。
總之,這段代碼沒有多大意義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.