以全局变量名称作为输入并更改其值的函数

时间:2019-07-18 01:52:03

标签: c++

我有一个全局变量x,我想编写一个函数来检查x是否大于或等于700,如果是,我想将x设置为100。

现在,如果我编写一个简单的if语句,如下所示,它就可以正常工作。

但是,如果我使用x而不是我将其作为由if语句组成的函数的输入,它将停止工作。我该如何解决?

请不要告诉我使用其他方法来完成此任务,因为这与其完成任务无关,而在于学习如何按照我希望的方式进行。

我尝试在第二个代码块的if语句中的x前面放置“ ::”,但这没有用。我搜寻了互联网,但发现没有什么用。

这是一个简单的if语句,它可以正常工作,在代码运行后,x的值设置为100:

x = 800;
if (x >= 700) {
    x = 100;
}

现在我将其放入一个函数中,它停止工作;代码运行后,x仍等于800:

x = 800
void function(int x) {
    if (x >= 700) {
        x = 100;
    }

我没有收到任何错误消息或任何消息,该函数什么也没做,它使x停留在800,程序看起来好像该函数不存在。

1 个答案:

答案 0 :(得分:4)

之所以会发生这种情况,是因为函数内部的变量x与全局变量x不同。让我们重命名它以使其清晰:

void function(int function_x) {
    if (function_x >= 700) {
        function_x = 100;
    }
}

// later:
x = 701;
function(x);

现在x为701,function_x为701。然后该函数使function_x为100。但是x仍为701。

那么,如何更改它,以便函数更改x?最直接的更改是通过添加function_x来使&成为引用:

//                |
//                |
//                V
void function(int &function_x) {
    if (function_x >= 700) {
        function_x = 100;
    }
}

// later:
x = 701;
function(x);

现在,它不仅传递数字701function,而且传递x的位置。现在,访问function_x中的function可以访问全局变量x而不是函数中的局部变量。当然,您可以传递 any int变量,该函数将对其进行更新:

int blah = 701;
function(blah);
// now blah's value is 100