这可能是一个无聊的问题!谢谢!
这是代码:
#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++、MinGW GCC 4.7.2 的 Windows 中:
所以问题集中在数组b上:
我知道我还没有初始化数组b。
数组b充满了垃圾值,但为什么总是有像“X 0 X 0 X”这样固定位置的'0'??
里面发生了什么? 只是一种保护机制?
这是未定义的行为。无法保证,如果这些零存在,那只是偶然地为真。
解释是,由于某种随机原因,在内存中的这些位置存储了 0,然后才将其重新用于此处的目的。由于您在堆栈上分配数组,因此这些零可能来自先前的函数调用,并且可能是一些填充。编译器会按照他的意愿去做。
读取数组中未初始化元素的行为是未定义。编译器可以做任何事情。
(由于大括号初始化,
a
的所有元素都可以读取,尽管在C++中你可以写int a[5] = {};
)。