想在C ++中知道int[]
中未分配整数的值通常是多少。
实施例
int arr[5];
arr[1]=2;
arr[3]=4;
for(int i=0;i<5;i++)
{
cout <<arr[i] <<endl;
}
打印
-858993460
2
-858993460
4
-858993460
我们知道数组将是{?,2,?,4,?}
,在哪里?不明。
“?”会是什么?通常?
当我测试时,我总是得到负值。 我可以假设在C ++中,整数数组中的未分配元素总是小于或等于零吗?
如果我错了,请纠正我。当我在Java中学习时,数组中的未分配元素将产生null。
答案 0 :(得分:8)
在形式上,在大多数情况下,读取未初始化值的尝试会导致未定义的行为。所以,正式地说关于实际价值的问题是没有实际意义的:你甚至不能直接看到这个价值。
实际上,C和C ++中未初始化的值是不可预测的。最重要的是,它们不应该是稳定的,这意味着多次读取相同的未初始化值并不能保证读取相同的值。
如果需要预先初始化的局部数组,请使用显式初始化器
进行声明int arr[5] = {};
以上保证用整数零填充数组。
答案 1 :(得分:1)
当我测试时,我总是得到负值。
(以前)未使用的内存空间似乎填充了十六进制代码0xCC。但是,如上所述 - 几次 - 你不能依赖。
在你的一条评论中,你澄清了你的任务:
我试图创建一个int数组,让我们说大小为100,然后将正整数随机插入数组中的任何位置。如果阵列未满。我怎么能确定数组中的那个位置是否从未被分配[?]
用零填充数组(手动或根据AndrewT的答案)。由于您只插入正整数,所以您需要测试的是!0。
答案 2 :(得分:0)
内存的单元化区域中包含的值可以是任何值,它取决于实现。最有效的实现是保留内存,因此您可以在数组中找到之前包含的内容。重要提示:it is not something you can use as a random value。一些实现(我已经看到,特别是在过去,在调试模式下编译和运行时)可能会在您的内存中放置零,但这种情况并不常见。你根本不应该依赖未初始化的记忆区域的内容。
要了解数组中是否未触及某些内容,可以将其初始化为某些值,如DEADBEEF: http://en.wikipedia.org/wiki/Hexspeak
(除非你是如此不幸,你必须插入的一个值完全对应于DEADBEEF ... :))
答案 3 :(得分:0)
你无法知道它会产生什么,因为它将那一刻内存中的位作为值。因此,您可以获得任何值,而不仅仅是负值。
答案 4 :(得分:0)
这些是垃圾值,您不能期望正确使用这些变量,并且它们无法预测它可能导致的结果。每当变量被分配时,内存的一部分会被分配给该变量,而这些部分可能先前用于其他一些您无法知道的未知计算,因此您必须使用某些值初始化这些变量以避免使用垃圾值。
答案 5 :(得分:0)
您没有在这些位置分配任何值。所以它会从内存中返回垃圾值。您必须在这些位置放置一些值。未实现的位置将以某些意外/不可预测的值返回。