为什么未分配的int有值?

时间:2016-03-27 22:22:16

标签: c++ c pointers integer

如果我运行以下代码,则会显示一个长号。

int i;    
int *p;    
p= &i;     
cout<<*p;

为什么未分配的int有值?那个价值是什么?

6 个答案:

答案 0 :(得分:5)

指针p的值是int i的地址。您为其分配了地址&运算符:p = &iint i本身未初始化,也称为默认初始化。当您使用*p取消引用指针时,您将获得未初始化int i的值,这可能是任何值。

int i的值是未初始化的内存,解释为int。使用未初始化的变量是未定义的行为。

如果没有指针,你只需执行相同的操作:

int i;
cout << i;

答案 1 :(得分:4)

因为这是&#34;未定义的行为&#34;用C ++表示。

&#34;未定义的行为&#34;意味着什么是可能的&#34;。这包括:

  • 您获得了该对象的随机值。每次运行代码时,它可以始终相同或不同。

  • 程序崩溃。

  • 您的计算机开始播放最新的Justin Bieber视频,无法阻止它。

  • 如你所知,宇宙已经结束。

等等......那是什么&#34;未定义的行为&#34;装置

答案 2 :(得分:1)

想象一下,你想购买一块土地,你打算建房子。要购买土地,请联系当地的土地卖方。

enter image description here

你需要告诉他你需要多少单位的土地。作为回报,他会告诉你土地的位置。

完成 - 你的土地已经可以使用了。但是你注意到了什么吗?土地卖方只告诉你土地的坐标。他对土地没什么好说的。在土地上可能已经存在房屋。甚至可能有酒店或机场。谁知道那里有什么?如果你试图使用土地,而不先建房子,你不能保证会有什么。作为土地所有者,您有责任在土地上建造一些东西,并在适当的时候使用它。

C / C ++与上面的例子相同。要求int,就像要求一块8个单位的土地。 C / C ++会给你土地,告诉你它的坐标。它不会告诉你土地包含的内容。你负责使用土地把房子放在上面。如果你不放房子,并试图进入房子&#34;,你最终可能会进入机场。希望现在更清楚:)。

答案 3 :(得分:0)

仅仅因为 i 所在的内存位置某个值(无论它是什么值)。 Sam指出,这是未定义(和不需要的)行为的一个很好的例子。

答案 4 :(得分:0)

因为变量不能为空。

计算机内存的每个字节都包含一些东西。

计算机程序在完成内存时通常不会清理内存(出于速度原因),因此当你保留一个未初始化的变量时,它会有一些随机(或多或少)的值留在这个地方通过另一个程序或我们自己的代码记忆。

通常它是0或最近被破坏的某个其他变量的值或某个内部指针。

答案 5 :(得分:-1)

变量 i 的内存位置(堆栈中)的当前内容。