作业,请提出建议
显然我对在方法中返回内容的想法是错误的。我正在尝试编写获取数字和运算衍生物的方法。到目前为止,我只想得到一个非负数的导数,它不带有“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,但事实并非如此。我该如何纠正?
答案 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执行的任何修改都将发生在该例程的本地堆栈帧上。