繁体   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