c++ - 对为什么增量函数实际上不增加变量感到困惑
问题描述
我最近开始学习 C++,并开始观看来自名为 Cherno 的游戏开发者的一个有趣的视频系列。在了解了指针的工作原理后,我决定尝试学习引用的工作原理,在视频中,他给出了一个我有点困惑的示例代码片段。在我看来,输入到增量函数中的参数将返回其增量值是合乎逻辑的,但事实并非如此。对不起,如果这看起来很幼稚,我很新。这是我提到的代码片段。
#include <iostream>
#define log(x) std::cout << x << std::endl
void increment(int value) {
value++;
}
int main() {
int a = 5;
increment(a);
log(a);
}
编辑:在对代码进行了一些测试之后,我意识到当我在 void increment 函数内部而不是在 main 函数内部记录输出时,它返回了递增的值。这也让我和我最初的问题感到困惑。
解决方案
在这段代码中,你声明了一个函数,并带有一个按值传递给它的参数:
void increment(int value) {
value++;
}
它真正做了什么,它增加了这个值......在函数内部,就是这样。它不返回值,也不更新任何其他变量。
有几种方法可以解决问题。
- 您可以以经典方式从函数返回值:
int increment(int value) {
value++;
return value;
}
int main() {
int a = 5;
a = increment(a);
...
}
在上面的例子中,新的值a
将会增加。
- 您可以使用指针来更新在函数范围之外声明的变量。您可以将指针视为变量的地址。
void increment(int *pointer) {
(*pointer)++;
}
int main() {
int a = 5;
a = increment(&a);
...
}
在上面的示例中,您a
使用变量的地址(指针)更新了变量的值。
- 你可以使用参考。它们只是变量的代理,通常表现为指针。不同之处在于允许使用适合代理的语法:
void increment(int &proxy) {
proxy++;
}
int main() {
int a = 5;
a = increment(a);
...
}
在这种情况下,代理只是在函数范围之外引用变量的一种方式,++ 将更新变量的值a
推荐阅读
- python - Python - Django - 通用字段模型设计
- javascript - 将 div 移出屏幕
- php - 是否可以使用 PHP 将小写字母转换为大写字母并删除同一函数中的重音符号?
- mysql - SAS EG 中的程序延迟启动
- java - 无法将 JCheckBoxMenuItem 添加到菜单
- c# - C#如何将Word文件中的每个表写入自己的Excel文件
- python - 交换数据帧中的单元格以最小化对相关差异总和的影响
- java - 如何像 python 一样将所有类型放入 Java ArrayList 和 hashMap 中。(Numbers, String, List, HashMap)
- javascript - Ajax 在等待 d3 graphs/.json 响应时加载图形?(导轨)
- python - Python:将图像和数据帧写入同一个 excel 文件