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,并且程序就像该函数不存在一样。
解决方案
发生这种情况是因为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
,而不是函数中的局部变量。当然,你可以传递任何 int
变量,函数会更新它:
int blah = 701;
function(blah);
// now blah's value is 100
推荐阅读
- matlab - |Ubuntu 18.04, opencv-3.4.0, MATLAB/R2018a| make 对 cv::dnn::eperimental 的未定义引用失败
- python - 使用基于代理的建模在 python 中创建合成数据
- c# - c# MCRYPT_RIJNDAEL_256 php中的加密解密类
- r - 发布应用程序后 Rshiny 抛出错误
- fpga - 确定FPGA进程中所有语句的执行时间
- python - 如何在张量流中验证优化模型
- php - 如何在 laravel 中显示和编辑相同的刀片?
- html - li 上的文本对齐对齐在 Firefox 中移动文本上的项目符号
- python - 有没有办法 str1 -= str2?
- android - 关闭蓝牙后 OnLeScan 继续触发