5

我是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,所以我知道没有错误,所以现在我需要打印结果。

4

3 回答 3

7

C 没有通过引用传递。您可以传入一个指针,这就是您在这里所做的,但 C 仅具有按值传递。

现在到你的实际问题:

我不明白的是调用该方法时最初的结果是什么?它只是空吗?

不,在调用函数之前, 的值result是未定义的add。如果您在分配给它之前尝试使用 的值,您将无法保证result,无论是通过在声明它的函数中分配给它,还是通过add使用类似*result = d + dd.

就此而言, double 永远不可能null。Null 是一个可能的指针值,而不是一个可能的浮点数。

为什么我要返回 0 或 -1 而不是结果呢?

如果要result直接返回,则必须有某种可区分的“计算失败”返回值,这有点混乱,让调用者在使用之前检查结果。这种方式迫使调用者add注意到有状态码作为返回值,如果调用者想忽略它,那么他们可以(尽管你不应该忽略状态码)。

显然我会得到 7 作为结果,但是我将如何在不返回结果的情况下打印出来呢?

Ed Heal 的建议是对的printf。不过,如果您使用的是 Linux 或 Mac OS X,我还建议您man printf从终端运行 - 这通常比打开 Web 浏览器更方便。

于 2012-09-08T02:16:02.083 回答
2

谢谢你的诚实。令人耳目一新。

该行应为

returnValue = add(2.0, 5.0, &result);

并打印出结果查找printf - 这样就可以了。

于 2012-09-08T02:19:37.713 回答
0

您编写的代码在声明变量时不会为 result 赋值。因此它包含一些随机数。用这个数字做任何事情显然是不好的,因为它会导致你的程序产生不可预知的结果。这就是所谓的未初始化变量错误。

您的代码在分配之前没有引用变量,所以我并不是说您有错误。我只是在回答结果分配之前包含什么的问题。如果你想让它有一个特定的值,你可以这样声明它:

double result = 7;

它总是有一些预定义的值。同样,在您的情况下没有必要这样做,我只是说如果您想要一个始终定义的值,您可以这样做。

于 2012-09-08T11:30:56.340 回答