C ++中的数组中的垃圾值是否可能为负?

时间:2017-04-07 11:15:34

标签: c++ c++11 c++14

考虑:

int a[100];

a[i](其中0

3 个答案:

答案 0 :(得分:2)

是的,为什么不呢?这些位可以是任何东西,整数的符号通常是其MSB(最高有效位)。如果该位为1,则int将被视为否定。

但是,我知道这一点并不重要。您不能依赖垃圾数据,因为它是未定义的行为。

答案 1 :(得分:1)

答案是它可以是任何值。

但是,不要考虑将它用于任何事情。这个程序: -

void func()
{
    int a[100];
    if (a[10] == 0 || a[10] != 0) {
        std::cout << "The value is either zero or not zero\n";
    }
}

完全有可能您的编译器不会打印消息,因为访问初始化值是未定义的行为,编译器可以执行任何包括这样的事情。并且越来越多的编译器。

答案 2 :(得分:0)

我想如果你理解垃圾价值的含义,你就不会问这个问题。

声明变量时,会为其分配一块内存。该内存可以是操作系统认为免费的任何内容,因此可以包含由分配了相同内存的某个先前程序写入的位。

之前的节目可能是任何东西(音乐播放器,您正在播放的游戏,您观看过的图像等)。因此,该数据只是一堆位,现在在代码中用作整数。所以你的编译器会把它读成一个整数,这就是为什么如果AlexG提到的第一位是1它可能是负数