【问题标题】:Why increment function is not increment the passed argument? [duplicate]为什么增量函数不增加传递的参数? [复制]
【发布时间】:2020-10-31 16:21:32
【问题描述】:

我对为什么函数增量不返回值 11 感到困惑,因为 a 是函数增量的本地,因此我们无法在主函数中访问它。

#include <iostream>

using namespace std;

int increment(int a) {
  a=a+1;
  return a;
}

int main() {
  int a=10;
  increment(a);
  cout<<a;
  return 0;
}

【问题讨论】:

  • 您通过值传递a,因此您正在递增该值的副本。然后在函数结束时丢弃所述副本,原件保持不变。
  • 试试a=increment(a);
  • @EtienneDeMartel 在函数结束时被丢弃?它被退回。调用函数时会丢弃该值。
  • 你能解释一下按值是什么意思
  • @vikash 变量,您知道它们是。他们只是对他们有某种价值。这些值/变量驻留在内存(某种)中的 address 中。 指针(例如int*)是一个变量/值,它等于int类型的某个其他变量/值的地址。当您将某些内容传递给函数(指针或其他方式)时,它会复制该值。因此,传递的指针会复制指针的地址(而不是其内容!),传递的值会复制该值。 C++ 还具有传递引用语义 (int&amp;)

标签: c++


【解决方案1】:

该函数正在返回递增的值,但您忽略了返回的值。 你会看到 11 用这个

int main() {
  int a=10;
  int b = increment(a);
  cout<<b;
}

【讨论】:

    【解决方案2】:

    您的函数很好地返回 11,但您希望变量 'a' 被更改,但事实并非如此,因为它是按值而不是按引用传递的。

    您调用了函数 increment(a),但没有使用返回值。

    如果您计算 increment(a) 或使用 increment(a) 初始化变量,您会注意到返回值为 11,但变量 'a' 的值仍为 10。 试试

    int var = increment(a); std::cout << var << std::endl; // print 11
    

    std::cout << increment(a) << std::cout //print 11
    

    【讨论】:

      【解决方案3】:

      您需要通过引用发送值。

      int increment(int &amp;a){

      【讨论】:

      • @vikash 你需要了解传值和传引用的区别。
      • 这是不正确的。该函数已经返回增加的值。不需要经过ref
      猜你喜欢
      • 2018-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-27
      • 2015-12-08
      • 2021-12-26
      • 1970-01-01
      相关资源
      最近更新 更多