首页 > 解决方案 > 以全局变量名称为输入并更改其值的函数

问题描述

我有一个全局变量 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,并且程序就像该函数不存在一样。

标签: c++

解决方案


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

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

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

现在x是 701 和function_x701。然后函数生成function_x100。但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,而不是函数中的局部变量。当然,你可以传递任何 int变量,函数会更新它:

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

推荐阅读