Vol*_*otz 1 c++ variables program-entry-point
我是 C++ 的新手,在学习 C++ 时遇到了这个问题。
这是代码
#include <iostream>
using namespace std;
void another_func() {
int a;
cout << a << endl;
}
int main() {
int a;
cout << a << endl;
another_func();
}
Run Code Online (Sandbox Code Playgroud)
我正在使用g++ (GCC) 10.1.0,我发现每次运行代码时,函数a内部main都会被初始化为0,而ainanother_func将是一个随机数。如下,
? g++ test.cpp && ./a.out
a in main: 0
a in another_func: 32612
Run Code Online (Sandbox Code Playgroud)
据我所知,局部变量存储在堆栈中,它们没有自动初始化机制。所以a在another_func预期中。但是,有人可以告诉我为什么将ainmain函数初始化为0?
提前致谢!
未初始化并不意味着非零,它可以有任何值。在许多操作系统上,新分配的内存页面被填充,0因此在非调试代码中,未初始化的值通常0也是如此。
你的程序的行为是不明确,但什么是有可能发生的是,a在main要么是第一次使用堆栈或者你只是很幸运和初始化代码之前运行main堆栈的叶子面积0。
调用cout将写入堆栈,因此当您执行another_func堆栈内存将0不再全部。