c-哪一个是正确的返回值类型


我正在编写两个计算阶乘的程序。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,只需打印返回的值(从技术上讲,这是一个乘积,而不是总和(。

最新更新