一个函数中的变量从另一个函数中的变量中获取值

Variable in one function picks up value from variable in another function

本文关键字:变量 函数 另一个 获取 一个      更新时间:2023-10-16

当我在devC ++中运行此cpp代码时:

#include <iostream>
using namespace std;
#include <conio.h>
void getdata();
void dis();
void getdata()
{
    int radius;
    cout<<"n enter radius of circle:-";
    cin>>radius;
}
void dis()
{   
    int rad;
    cout<<"n num is "<<rad;
}
int main()
{
    //int radius;
    getdata();
    dis();
    getch();
    return 11;
}

我的输出显示:

输入圆半径:-15半径为 15

我的问题是: radiusrad是其函数的局部,那么rad如何成为与radius相同的值呢?它们具有不同的功能。

有人可以解释一下正在发生的事情吗?

未定义的行为。

调用 getdata() 时,radius占用堆栈上的特定内存块,并使用用户的输入进行填充。当getdata()退出时,该内存块可供以后重用,并且不会清除其内容。

当之后调用dis()时,rad没有被初始化,因此它会拾取它占用的内存块中已经存在的任何随机值。

最有可能的是,正在发生的事情是rad恰好占用了radius之前占用的同一内存块。这就是为什么你会看到相同的值。但这并不能保证,所以不要依赖它。 在 radiusrad 上方添加一些其他变量,您将看到不同的行为。

在执行依赖于变量的操作之前,请始终初始化变量。

如果变量未初始化,它将保存垃圾值

在您的情况下rad将打印垃圾值。每次编译时可能会有所不同。