【问题标题】:Variable in one function picks up value from variable in another function一个函数中的变量从另一个函数中的变量中获取值
【发布时间】:2018-03-17 05:16:38
【问题描述】:

当我在 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 相同的值?它们的功能不同。

有人能解释一下发生了什么吗?

【问题讨论】:

标签: c++ function declaration


【解决方案1】:

未定义的行为。

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-02
      • 2014-01-22
      • 2011-01-18
      • 1970-01-01
      • 1970-01-01
      • 2016-10-18
      • 1970-01-01
      相关资源
      最近更新 更多