这可能是一个无聊的问题!谢谢!
以下是代码:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int a[5] = {0};
int b[5];
cout << a << endl;
cout << b << endl;
for (int i = 0; i < 5; i++)
{
cout << a[i] << " ";
}
cout << endl;
for (int i = 0; i < 5; i++)
{
cout << b[i] << " ";
}
cout << endl;
return 0;
}
在Ubuntu中:g ++ a.cpp
在带有DEV C ++的Windows中,MinGW GCC 4.7.2:
所以问题集中在数组b:
我知道我没有初始化数组b。
数组b充满了垃圾值,但为什么总是有“0”的固定位置,如“X 0 X 0 X”??
里面发生了什么? 只是一种保护机制?
答案 0 :(得分:4)
这是未定义的行为。如果这些零在那里,则无法保证只是意外是真的。
解释是,由于某些随机原因,在内存中的这些位置存储了一个0,然后才重新用于此目的。由于您在堆栈上分配了数组,因此这些零可能来自先前的函数调用,可能是一些填充。编译器会随心所欲地做到这一点。
答案 1 :(得分:1)
读取数组中未初始化元素的行为是 undefined 。允许编译器执行任何操作。
(由于括号初始化,可以读取a
的所有元素,尽管在C ++中你可以写int a[5] = {};
)。