C/C++ 未初始化数组的结果

HIP*_* LD -5 c++ arrays c++11

这可能是一个无聊的问题!谢谢!

这是代码:

#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;
}
Run Code Online (Sandbox Code Playgroud)

在 Ubuntu 中:g++ a.cpp

在此处输入图片说明

在带有 DEV C++、MinGW GCC 4.7.2 的 Windows 中: 在此处输入图片说明

所以问题集中在数组b上:

我知道我还没有初始化数组 b。

数组 b 充满了垃圾值,但为什么总是有 '0' 和固定位置,如“X 0 X 0 X”??

里面会发生什么??只是保护机制?

cdo*_*nat 6

那是未定义的行为。不能保证,如果这些零在那里,那只是偶然地是真的。

解释是,由于某些随机原因,在内存中的这些位置存储了一个 0,然后再用于您的目的。由于您在堆栈上分配数组,因此这些零可能来自先前的函数调用,并且可能是一些填充。编译器会随心所欲地这样做。