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