program #1
的返回值类型为void,program #2
的返回值为int。
但是我缺乏知识,所以我不知道哪一个是对的。
哪一个是正确的?
program #1
-返回值类型:void
#include <stdio.h>
void calculateFactorial(int count, int *sum);
int main()
{
int number;
int sum = 1;
printf("factorial number: ");
scanf(" %d", &number);
calculateFactorial(number, &sum);
printf("result: %dn", sum);
return 0;
}
void calculateFactorial(int count, int *sum)
{
if (count == 0)
{
return;
}
*sum *= count;
calculateFactorial(--count, sum);
}
program #2
-返回值类型:int
#include <stdio.h>
int calculateFactorial(int count, int *sum);
int main()
{
int number;
int sum = 1;
printf("factorial number: ");
scanf(" %d", &number);
calculateFactorial(number, &sum);
printf("result: %dn", sum);
return 0;
}
int calculateFactorial(int count, int *sum)
{
if (count == 0)
{
return *sum;
}
*sum *= count;
calculateFactorial(--count, sum);
}
第一个是正确的,第二个是错误的。在第二个例子中,即使函数类型是int,也不返回任何内容。你应该返回一个int。例如,
int func() {//Whatever code}
是错误的。它需要返回一个int
。正确的版本是:
int func() {
return 0; //Or whatever int
}
如果您不想返回任何内容,那么您需要键入void。
void func() {
return 0;
}
这是错误的。你不能退货,你需要做:
void func {
return; //Not having a return won't do anything though, you can leave it blank
}
void func {} //Works, no need to return
您可能会感到困惑,因为:
1. void main() {} //Works and
2. int main() {} //Works as well, and
3. int main() {return 0;} //Works as well
所以,没有1。绝对是垃圾。它在某种程度上起作用,但它是错误的,而且是垃圾。检查int main((和void main((是如何工作的。
在第2行中,编译器为您添加了return 0
。它只发生在主函数中。
没有。3是完全正确的。
处理函数返回值的方式没有对错之分:它们可以作为直接值返回,也可以通过传递的指针作为辅助值返回。然而,每种方法都有一种(或多种(正确的方法,也有许多错误的方法。在你的两个例子中,第一个做得对,第二个做得不对。在第二个示例中,count!=0,所以这是一种错误的方式。
一般来说,我更喜欢一个简单的数学函数(比如阶乘(来返回一个直接值(在这种情况下,作为int(;为此,我将编写calculateFactorial
函数,如下所示:
int calculateFactorial(int num)
{
if (num <= 1) return 1;
return num * calculateFactorial(num - 1);
}
在这种情况下不需要sum
,只需打印返回的值(从技术上讲,这是一个乘积,而不是总和(。