如果我运行以下代码,则会显示一个长号。
int i;
int *p;
p= &i;
cout<<*p;
为什么未分配的int有值?那个价值是什么?
答案 0 :(得分:5)
指针p
的值是int i
的地址。您为其分配了地址&
运算符:p = &i
。 int i
本身未初始化,也称为默认初始化。当您使用*p
取消引用指针时,您将获得未初始化int i
的值,这可能是任何值。
int i
的值是未初始化的内存,解释为int
。使用未初始化的变量是未定义的行为。
如果没有指针,你只需执行相同的操作:
int i;
cout << i;
答案 1 :(得分:4)
因为这是&#34;未定义的行为&#34;用C ++表示。
&#34;未定义的行为&#34;意味着什么是可能的&#34;。这包括:
您获得了该对象的随机值。每次运行代码时,它可以始终相同或不同。
程序崩溃。
您的计算机开始播放最新的Justin Bieber视频,无法阻止它。
如你所知,宇宙已经结束。
答案 2 :(得分:1)
想象一下,你想购买一块土地,你打算建房子。要购买土地,请联系当地的土地卖方。
你需要告诉他你需要多少单位的土地。作为回报,他会告诉你土地的位置。
完成 - 你的土地已经可以使用了。但是你注意到了什么吗?土地卖方只告诉你土地的坐标。他对土地没什么好说的。在土地上可能已经存在房屋。甚至可能有酒店或机场。谁知道那里有什么?如果你试图使用土地,而不先建房子,你不能保证会有什么。作为土地所有者,您有责任在土地上建造一些东西,并在适当的时候使用它。
C / C ++与上面的例子相同。要求int
,就像要求一块8个单位的土地。 C / C ++会给你土地,告诉你它的坐标。它不会告诉你土地包含的内容。你负责使用土地把房子放在上面。如果你不放房子,并试图进入房子&#34;,你最终可能会进入机场。希望现在更清楚:)。
答案 3 :(得分:0)
仅仅因为 i 所在的内存位置某个值(无论它是什么值)。 Sam指出,这是未定义(和不需要的)行为的一个很好的例子。
答案 4 :(得分:0)
因为变量不能为空。
计算机内存的每个字节都包含一些东西。
计算机程序在完成内存时通常不会清理内存(出于速度原因),因此当你保留一个未初始化的变量时,它会有一些随机(或多或少)的值留在这个地方通过另一个程序或我们自己的代码记忆。
通常它是0或最近被破坏的某个其他变量的值或某个内部指针。
答案 5 :(得分:-1)
变量 i 的内存位置(堆栈中)的当前内容。