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

A function which takes name of global variable as input and changes its value

本文关键字:函数 全局变量 输入      更新时间:2023-10-16

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

发生这种情况是因为函数内部的变量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_x100。但x仍然是701。

那么,您如何更改此设置以使函数确实更改x?最直接的更改是通过添加&来使function_x成为引用:

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

现在,它不只是将数字701传递给function,而是传递x的位置。访问function内部的function_x现在访问全局变量x,而不是函数中的局部变量。当然,你可以传递任何int变量,函数会更新它:

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