将全局变量的名称作为输入并更改其值的函数
A function which takes name of global variable as input and changes its value
我有一个全局变量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
内部的function_x
现在访问全局变量x
,而不是函数中的局部变量。当然,你可以传递任何int
变量,函数会更新它:
int blah = 701;
function(blah);
// now blah's value is 100
相关文章:
- 内联函数中具有内部链接的全局变量
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- C++ 在编译时具有函数计算全局变量
- 修改程序的入口点时未调用全局变量的构造函数
- 赋予全局变量而不是局部变量优先级的函数 - (异常行为)
- std::线程不是全局变量,但在到达创建它的函数的末尾时不会超出范围?
- 如何在全局变量的构造函数之前运行函数
- 如何获取使用全局变量的所有函数名称?
- 在 C++17 中修改 constexpr 函数中的全局变量
- C++从 std::async 函数读取命名空间中的全局变量标志
- 为什么我的类函数不使用我的全局变量?
- 有什么理由C++ 11+ std::mutex 应该声明为全局变量,而不是作为函数参数传递到 std::thread 中
- 将全局变量的名称作为输入并更改其值的函数
- 如何使用 c++ 中的函数访问全局变量?
- 是否可以通过全局变量定义具有可变参数数的函数中的参数数量
- 如何创建用于多个源文件的全局变量/包含/函数
- 查找全局变量,而不是在 c++ 函数中构造它们
- 通过使用全局变量的函数访问在给定范围内被覆盖的变量
- 具有递归函数且不带全局变量的程序 - C++
- C++:如何从静态函数写入全局变量