c ++不在数组边界内的元素的值是什么

时间:2018-11-20 08:33:57

标签: c++ arrays

int main()
{
    int n[] = {2};
    cout <<n[1] << endl;

    return 0;
}

在这段代码中,我得到了一些数字,也有n [2],n [3]等。我有ë表示字符串数组,@表示char数组。我不认为这是内存位置,这是什么?

1 个答案:

答案 0 :(得分:4)

int n[] = {2};

这里您要声明一个包含一个元素的数组。所以现在n[0]2。那是唯一的元素,因此其他所有内容都超出范围。因此,这里:

cout <<n[1] << endl;

是未定义的行为,因为您正在访问 second 元素,该元素不存在。请记住,数组索引从0开始,因此元素0是第一个,而1是第二个。

那么为什么要打印垃圾值呢?由于它是未定义的行为,因此无法保证它会做什么,但是最有可能发生的事情是它正在计算相应的内存位置并在结果地址处打印数据,该地址被解释为int。通常这会带来一些垃圾价值。