c++ 对于为什么增量函数实际上不增加变量感到困惑[已关闭]

vyu0f0g1  于 2022-12-15  发布在  其他
关注(0)|答案(1)|浏览(118)

**已关闭。**此问题为not reproducible or was caused by typos。当前不接受答案。

这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
两年前关闭了。
Improve this question
我最近开始学习C++,并开始观看一个有趣的视频系列,由一个游戏开发者称为Cherno。在了解了指针如何工作后,我决定尝试学习如何引用工作,在视频中,他给出了一个代码片段的例子,我有点困惑。在我的脑海中,输入到increment函数中的参数返回其递增值在逻辑上是有意义的,但实际上并没有。我是个新手。这是我提到的代码片段。

#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函数中记录输出时,它返回的是增量值,这也让我和最初的问题一样困惑。

3pvhb19x

3pvhb19x1#

在这段代码片段中,您声明了一个函数,并通过值传递了一个参数:

void increment(int value) {
    value++;
}

它真正做的是在函数内部增加这个值,就这样,它不返回这个值,也不更新任何其他变量。
有几种方法可以解决这个问题。
1.你可以用一种经典的方式从函数中返回值:

int increment(int value) {
   value++;
   return value;
}

int main() {
   int a = 5;
   a = increment(a);
   ...
}

在上例中,a的新值将递增。
1.你可以用指针来更新一个声明在函数作用域之外的变量。2你可以把指针看作变量的地址。

void increment(int *pointer) {
   (*pointer)++;
}

int main() {
   int a = 5;
   a = increment(&a);
   ...
}

在上面的示例中,您使用变量a的地址(指针)更新了该变量的值。
1.你可以使用引用。2它们只是一个变量的代理,通常表现为指针。3不同之处在于允许一个适合代理的语法:

void increment(int &proxy) {
   proxy++;
}

int main() {
   int a = 5;
   a = increment(a);
   ...
}

在这种情况下,代理只是引用函数作用域之外的变量的一种方式,++将更新变量a的值

相关问题