哪一个是正确的 Return 值类型?
Which one is correct Return value type?
我正在编写两个计算阶乘的程序。 program #1
是让 return 值类型为 void,program #2
是让 return 值类型为 int。
但是我知识匮乏,不知道哪个是对的
哪个是正确的?
program #1
- return 值类型: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: %d\n", sum);
return 0;
}
void calculateFactorial(int count, int *sum)
{
if (count == 0)
{
return;
}
*sum *= count;
calculateFactorial(--count, sum);
}
program #2
- return 值类型: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: %d\n", sum);
return 0;
}
int calculateFactorial(int count, int *sum)
{
if (count == 0)
{
return *sum;
}
*sum *= count;
calculateFactorial(--count, sum);
}
第一个正确,第二个错误。在第二个中,即使函数类型是 int,你也不会 return 任何东西。你应该 return 一个整数。例如,
int func() {//Whatever code}
错了。它需要 return 和 int
。正确的版本是:
int func() {
return 0; //Or whatever int
}
如果您不想return任何东西,那么您需要使用 void 类型。
void func() {
return 0;
}
这是错误的。你不能return任何事情,你需要做:
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. 绝对是垃圾。它以某种方式起作用,但它是错误的并且是垃圾。检查 How does int main() and void main() work?.
没有。 2 编译器给你加了return 0
。它只发生在主函数中。
没有。 3 完全正确。
在处理 return 函数值的方式上没有对错之分:它们可以 return 作为直接值或通过通过指针。然而,每一种方法都有一种(或多种)正确的方法,也有许多错误的方法。在您的两个示例中,第一个以正确的方式完成,第二个以错误的方式完成。第二个例子中count != 0的情况没有return,所以是错误的做法
总的来说,我更喜欢简单的数学函数(如阶乘)而不是 return 直接值(在本例中为 int);为此,我会像这样编写 calculateFactorial
函数:
int calculateFactorial(int num)
{
if (num <= 1) return 1;
return num * calculateFactorial(num - 1);
}
在这种情况下不需要 sum
,只需打印 returned 值(从技术上讲,这是一个乘积,而不是总和)。
我正在编写两个计算阶乘的程序。 program #1
是让 return 值类型为 void,program #2
是让 return 值类型为 int。
但是我知识匮乏,不知道哪个是对的
哪个是正确的?
program #1
- return 值类型: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: %d\n", sum);
return 0;
}
void calculateFactorial(int count, int *sum)
{
if (count == 0)
{
return;
}
*sum *= count;
calculateFactorial(--count, sum);
}
program #2
- return 值类型: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: %d\n", sum);
return 0;
}
int calculateFactorial(int count, int *sum)
{
if (count == 0)
{
return *sum;
}
*sum *= count;
calculateFactorial(--count, sum);
}
第一个正确,第二个错误。在第二个中,即使函数类型是 int,你也不会 return 任何东西。你应该 return 一个整数。例如,
int func() {//Whatever code}
错了。它需要 return 和 int
。正确的版本是:
int func() {
return 0; //Or whatever int
}
如果您不想return任何东西,那么您需要使用 void 类型。
void func() {
return 0;
}
这是错误的。你不能return任何事情,你需要做:
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. 绝对是垃圾。它以某种方式起作用,但它是错误的并且是垃圾。检查 How does int main() and void main() work?.
没有。 2 编译器给你加了return 0
。它只发生在主函数中。
没有。 3 完全正确。
在处理 return 函数值的方式上没有对错之分:它们可以 return 作为直接值或通过通过指针。然而,每一种方法都有一种(或多种)正确的方法,也有许多错误的方法。在您的两个示例中,第一个以正确的方式完成,第二个以错误的方式完成。第二个例子中count != 0的情况没有return,所以是错误的做法
总的来说,我更喜欢简单的数学函数(如阶乘)而不是 return 直接值(在本例中为 int);为此,我会像这样编写 calculateFactorial
函数:
int calculateFactorial(int num)
{
if (num <= 1) return 1;
return num * calculateFactorial(num - 1);
}
在这种情况下不需要 sum
,只需打印 returned 值(从技术上讲,这是一个乘积,而不是总和)。