【问题标题】:Can't update parameters i & j无法更新参数 i & j
【发布时间】:2016-10-22 10:15:56
【问题描述】:
#include <iostream>
using namespace std;

int rev(int& sourcenum)
{
    int temp = sourcenum;
    int sum = 0;
    while (temp!=0)
    {
        sum*=10;
        sum += temp%10;
        temp/=10;
    }
    return sum;
};

int main() {
    int i,j;

    cin >> i >> j;

    int add = rev(i)+rev(j);
    cout<<i<<" "<<j<<endl;

    cout<<add<<endl;
    cout<<rev(add);

}

在这段代码中,我无法更改参数ij。我不知道为什么。

【问题讨论】:

  • 我很困惑 - 你不要尝试更新 i、j 或 sourcenum
  • 为什么int rev(int&amp; sourcenum)中的sourcenum是通过引用传递的?它没有被修改。如果您将其更改为 int rev(int sourcenum),您可以在调用级别将 i 替换为计算结果。

标签: c++ pass-by-reference


【解决方案1】:

rev(...) 函数的第一行,您正在执行int temp = sourcenum;。该语句复制了变量sourcenum 中的值,您有意通过引用正确地传递了该值。 问题是,temp 现在是一个 new 独立变量,只是使用您通过引用传递的变量 sourcenum 的值进行初始化。因此,如果您现在更改temp,它不会影响sourcenum

作为一个最小的更改建议:如果您将int temp = sourcenum; 更改为int&amp; temp = sourcenum;,您应该会得到预期的更改传递引用的结果。

【讨论】:

  • @MoonJune:您需要注意的是,您的程序流程逻辑没有被我的评论纠正。要修复 0 0 输出,您需要将条件 while( temp!= 0) 调整为其他内容,因为它将导致 0 0 输出。我不确定你想用这段代码归档什么,但至少我的更改 ij 之后发生了更改。因此,您关于通过引用传递的问题得到了解决。调试你的代码,看看你在执行过程中如何更改sourcenum,以检查你在哪里有逻辑错误。
猜你喜欢
  • 1970-01-01
  • 2019-04-19
  • 2021-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-20
相关资源
最近更新 更多