为什么一个子程序的变量正在访问另一个子程序的值?

问题描述 投票:0回答:1

为什么要为变量“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;
    }
c++ variables
1个回答
1
投票

这是因为您没有在第二个函数中初始化

b
,这意味着它将具有一些任意值。它在这种情况下获得的值似乎是
a
来自上一个函数的值。

当你调用一个函数时,它会调整堆栈指针,以便它有一个与调用者分开的堆栈帧

main()
。调用
a()
执行此操作,然后它将其堆栈帧中的一些内存位置(对于局部变量
a
)设置为
743
.

当我们然后退出

a()
时,我们调整堆栈指针,以便我们再次使用
main()
的堆栈帧但是我们没有清除
a()
堆栈帧所在的内存.

然后,在调用

b()
时,我们调整栈帧,鉴于两个函数之间的相似性(相同数量的参数,相同数量的局部变量等),
b
的内存位置恰好是
a
a()
执行的时候。

这就是为什么它具有相同的价值。

请记住,这只是由于您所拥有的特定场景,标准无法保证。在你使用

b
而不先初始化它的那一刻,你一定会得到一些任意值。

底线,在尝试使用变量之前初始化变量。

© www.soinside.com 2019 - 2024. All rights reserved.