Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
困惑于为什么增量函数实际上不增加变量 我最近学习了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); }_C++ - Fatal编程技术网

困惑于为什么增量函数实际上不增加变量 我最近学习了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); }

困惑于为什么增量函数实际上不增加变量 我最近学习了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); },c++,C++,编辑:在对代码进行了一点测试之后,我意识到当我将输出记录在void increment函数中而不是主函数中时,它返回了递增的值。除了我最初的问题之外,这也让我感到困惑。在这段代码中,您声明了一个函数,并通过值传递了一个参数: void increment(int value) { value++; } 它真正做的是增加这个值。。。在函数内部,就是这样。它既不返回值,也不更新任何其他变量 有几种方法可以解决这个问题 您可以使用经典方式从函数返回值: 在上面的示例中,a的新值将递增 可以使

编辑:在对代码进行了一点测试之后,我意识到当我将输出记录在void increment函数中而不是主函数中时,它返回了递增的值。除了我最初的问题之外,这也让我感到困惑。

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

void increment(int value) {
    value++;
}
它真正做的是增加这个值。。。在函数内部,就是这样。它既不返回值,也不更新任何其他变量

有几种方法可以解决这个问题

您可以使用经典方式从函数返回值: 在上面的示例中,a的新值将递增

可以使用指针更新在函数范围之外声明的变量。您可以将指针视为变量的地址。 在上面的示例中,您使用变量a的地址指针更新了变量a的值

你可以使用参考资料。它们只是一个变量的代理,通常表现为指针。不同之处在于允许使用适用于代理的语法:
在这种情况下,代理只是引用函数范围外的变量的一种方式,++将更新变量a的值。

提示:代码中没有指针,因为您没有像这样通过引用传递值:void incrementint&value{.VTC作为输入错误。函数参数是按值获取的,因为它不是引用。您可以随意修改它,它不会更改main中的变量,因为它是一个副本,对调用方的变量没有影响。它会更改参数类型。如果说int value表示参数是按值获取的,则会创建一个副本。将其更改为int&value m将其作为引用,调用方变量的别名。引用参数和调用方变量是同一个对象。@无引用的schmobbing&函数接收传入值的副本,因此无论函数做什么都不会影响外部世界的main。如果使用引用,函数不会接收副本,它引用了main中的变量…函数中的任何更改都会直接影响main中的变量,因此不涉及返回值的概念。
int increment(int value) {
   value++;
   return value;
}

int main() {
   int a = 5;
   a = increment(a);
   ...
}
void increment(int *pointer) {
   (*pointer)++;
}

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

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