在C中通过引用传递:结果变量如何初始化?

And*_*kes 5 c pass-by-reference

我是C的新手,我必须制作一个迷你计算器程序(这是作业,但我不是在寻找答案,只是多了解一点).基本上,一个函数必须如下所示:

int add(double d, double dd, double *result);
Run Code Online (Sandbox Code Playgroud)

如果没有错误,它将返回0;如果发生错误,则返回-1(在添加的情况下,不会有很多错误 - 但是除法例如,除以0将是错误).

用户必须在终端中输入两个数字,然后将这些数字用作add方法中的参数值.我不明白的是,调用该方法时最初的结果是什么?它只是空吗?为什么我要返回0或-1而不是结果呢?例如:

double result;
returnValue = add(2.0, 5.0, &result); 
Run Code Online (Sandbox Code Playgroud)

显然我会得到7作为结果,但是如何在不返回结果的情况下将其打印出来?returnValue为0,所以我知道没有错误,所以现在我需要打印结果.

Ada*_*cin 7

C没有通过引用传递.你可以传入一个指针,这是你在这里做的,但C只有值传递.

现在问你的实际问题:

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

不,在调用函数result之前,值是未定义的add.你有没有任何保障,如果您尝试使用的值result分配给它之前,无论是在它的声明的功能分配给它,或在分配给它add与类似代码*result = d + dd.

就此而言,双重永远不可能null.Null是可能的指针值,而不是可能的浮点数.

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

如果你要result直接返回,你必须有某种显着的"计算失败"返回值,这有点凌乱,让调用者在使用之前检查结果.这种方式强制调用者add注意到有状态代码作为返回值,如果调用者想要忽略它,那么他们可以(尽管你不应该忽略状态代码).

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

Ed Heal是正确的建议printf.但是,如果您使用的是Linux或Mac OS X,我还建议您man printf从终端运行- 它通常比打开Web浏览器更方便.