簡體   English   中英

當我們在C ++中將常量整數引用分配給整數指針時,行為是什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM