局部变量 - 重新创建

M. *_*lex -4 c++

我想知道为什么在调用函数时不会重新创建局部变量?

#include <iostream>

using namespace std;  

void func(void)
{
    int a = 0;
    cout << &a << endl;
}


int main(void)
{
    func();
    func();
    func();
    func();
    system("pause");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么变量a每次都映射到同一个内存地址?

dbu*_*ush 5

标准未定义局部变量的地址.从一个呼叫到下一个呼叫可能是相同的,或者它可能是不同的.

在这种特殊情况下,使用此代码并在您的机器和编译器上,地址很可能是相同的,因为每次func调用它都会被调用main,因此堆栈每次都布局相同.如果您要从其中调用其他函数main然后调用func,则该地址很可能会有所不同.

但是,不能依赖此行为.