C ++澄清“回归”

时间:2011-04-25 21:01:09

标签: c++ return

作业,请提出建议

显然我对在方法中返回内容的想法是错误的。我正在尝试编写获取数字和运算衍生物的方法。到目前为止,我只想得到一个非负数的导数,它不带有“x”(无论给出什么值,结果都应为零)。

代码很长,需要清理,所以我只需要包含方法,调用以及我得到的内容。

方法:

int noXDerivative(int tempInt, string tempX)
{
    if (tempX == "")
    {
        tempInt = 0;
    }
    return tempInt;
}

void getDerivatives(int tempInt, string tempX, int tempInt2, string tempX2, char tempOperator)
{
    noXDerivative(tempInt, tempX);
    noXDerivative(tempInt2, tempX2);
}

电话:

getDerivatives(tempNumInt, tempNumX, tempNum2Int, tempNum2X, expression[iterator]);

我也直接称之为“noXDerivative”,看看会发生什么,但结果没有改变。我现在正在运行的测试是“5 + 6”(tempNumInt是5,tempNum2Int是6)。当我需要得到0时,我一直得到11(再次,没有“x”)。我希望如果我将tempNumInt作为参数之一,它将在noXDerivative方法中从5更改为0,但事实并非如此。我该如何纠正?

3 个答案:

答案 0 :(得分:2)

我不得不说我不明白你要做的是什么。

尽管如此,要实现在tempInt内修改getDerivatives()的目标,您可以这样做:

tempInt = noXDerivative(tempInt, tempX);

或者,您可以修改noXDerivative()函数,使其参数通过引用,而不是按值

int noXDerivative(int &tempInt, string tempX)
{
    ...
}

答案 1 :(得分:1)

return就是这样 - 它返回一个值。它不会改变传入的值。如果我正确理解你的代码,我敢打赌,如果你有像

这样的东西

int result1 = noXDerivative(tempInt, tempX)

result1会保持值为0.请注意,getDerivatives中的tempInt和tempInt2不会被修改,所以你需要弄明白......

答案 2 :(得分:0)

嗯,“建议”并不是很多。这里的问题是当一个例程returns一个值时,该调用必须用作左手值。

tempInt = noXDerivative(tempInt, tempX);

否则,您不会修改tempInt的值,至少使用例程的当前签名。您正在通过该调用将value作为参数传递给tempInt,并且您对tempInt执行的任何修改都将发生在该例程的本地堆栈帧上。