为什么要为变量“b”打印“a”的值? 累积据我所知,子程序的变量是堆栈动态变量,子程序的内存单元在子程序开始执行时分配,并在子程序结束执行时取消分配。(从-https://cse获取此信息。 buffalo.edu/~shapiro/Courses/CSE305/Notes/notes6.html) 如果有错请告诉我。
using namespace std;
void a(){
int a = 743;
cout<<a<<endl;
}
void b() {
int b;
cout<<b<<endl;
int main() {
a();
b();
return 0;
}
这是因为您没有在第二个函数中初始化
b
,这意味着它将具有一些任意值。它在这种情况下获得的值似乎是 a
来自上一个函数的值。
当你调用一个函数时,它会调整堆栈指针,以便它有一个与调用者分开的堆栈帧
main()
。调用 a()
执行此操作,然后它将其堆栈帧中的一些内存位置(对于局部变量 a
)设置为 743
.
当我们然后退出
a()
时,我们调整堆栈指针,以便我们再次使用main()
的堆栈帧但是我们没有清除a()
堆栈帧所在的内存.
然后,在调用
b()
时,我们调整栈帧,鉴于两个函数之间的相似性(相同数量的参数,相同数量的局部变量等),b
的内存位置恰好是a
是a()
执行的时候。
这就是为什么它具有相同的价值。
请记住,这只是由于您所拥有的特定场景,标准无法保证。在你使用
b
而不先初始化它的那一刻,你一定会得到一些任意值。
底线,在尝试使用变量之前初始化变量。