我是C的新手,我必须制作一个迷你计算器程序(这是作业,但我不是在寻找答案,只是多了解一点)。基本上,一个函数必须如下所示:
int add(double d, double dd, double *result);
如果没有错误,它将返回0;如果发生错误,则返回-1(在添加的情况下,不会有很多错误 - 但是除法例如,除以0将是错误)。
用户必须在终端中输入两个数字,然后将这些数字用作add方法中的参数值。我不明白的是,调用该方法时最初的结果是什么?它只是空吗?为什么我要返回0或-1而不是结果呢?例如:
double result;
returnValue = add(2.0, 5.0, &result);
显然我会得到7作为结果,但是如何在不返回结果的情况下将其打印出来? returnValue为0,所以我知道没有错误,所以现在我需要打印结果。
答案 0 :(得分:7)
C没有通过引用传递。你可以传入一个指针,这是你在这里做的,但C只有值传递。
现在问你的实际问题:
我不明白的是调用该方法时最初的结果是什么?它只是空吗?
不,在调用result
函数之前,add
的值未定义。如果您在分配之前尝试使用result
的值,则无法保证,或者通过在声明它的函数中指定它或在{{1中指定它使用add
等代码。
就此而言,双重永远不会是*result = d + dd
。 Null是可能的指针值,而不是可能的浮点数。
为什么我要返回0或-1而不是结果?
如果要直接返回null
,则必须使用某种特殊的“计算失败”返回值,这有点混乱,并且在使用之前让调用者检查结果。这种方式强制result
的调用者注意到有状态代码作为返回值,如果调用者想要忽略它,那么他们可以(尽管你不应该忽略状态代码)。
显然我会得到7作为结果,但是如何在不返回结果的情况下将其打印出来?
Ed Heal建议add
是正确的。但是,如果您使用的是Linux或Mac OS X,我还建议您从终端运行printf
- 这通常比打开网络浏览器更方便。
答案 1 :(得分:2)
答案 2 :(得分:0)
您声明的代码在声明变量时不会为结果赋值。因此它包含一些随机数。使用此数字执行任何操作显然都很糟糕,因为这会导致程序产生不可预测的结果。这将是所谓的未初始化的变量错误。
您的代码在分配之前不会引用该变量,所以我并不是说您有错误。我只是在分配之前回答结果包含的问题。如果您希望它具有特定值,您可以这样声明:
double result = 7;
并且它总是有一些预定义的值。同样,在你的情况下没有必要这样做,我只是说如果你想要一个总是定义的值你可以。