我有一个全局变量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,程序看起来好像该函数不存在。
答案 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);
现在,它不仅传递数字701
到function
,而且传递x
的位置。现在,访问function_x
中的function
可以访问全局变量x
而不是函数中的局部变量。当然,您可以传递 any int
变量,该函数将对其进行更新:
int blah = 701;
function(blah);
// now blah's value is 100