Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 递归中的返回类型_C - Fatal编程技术网

C 递归中的返回类型

C 递归中的返回类型,c,C,我对以下函数的行为感到困惑。以下是我坚持使用的一些程序: 案例1: void f() { printf("wow\t"); } int main() { f(); return 0; } 它给出了预期的输出wow 案例2: void f() { printf("wow\t"); } int main() { f(f()); return 0; } 它给出了错误:void表达式的无效使用,这是显而易见的 案例3: int f() {

我对以下函数的行为感到困惑。以下是我坚持使用的一些程序:

案例1:

void f()
{
    printf("wow\t");
}

int main()
{
    f();
    return 0;
}
它给出了预期的输出
wow

案例2:

void f()
{
    printf("wow\t");
}

int main()
{
    f(f());
    return 0;
}
它给出了
错误:void表达式的无效使用
,这是显而易见的

案例3:

int f()
{
    printf("wow\t");
}

int main()
{
    f(f());
    return 0;
}
为什么它会给出输出

f()
具有返回类型
int
。但在
main
中,它不存储在任何变量中。另外,
f()
没有接受任何参数,但在案例3中,它将接受由
f()
返回的参数

相同的代码在C++中不起作用。

< P>代码<代码> f(f-);
从内部函数调用调用
f
,然后从外部函数调用调用
f
。不存储
f
的返回值并没有任何作用。编译器不能仅仅因为忽略函数的返回值而避免调用函数,除非它知道函数没有后果,而这个函数确实有后果


忽略函数的返回值一点也不奇怪。例如,您可能有一个“remove entries”函数,返回它删除的条目数。您可以在不关心返回多少条目的上下文中调用该函数,因此忽略返回值。该函数仍必须运行,否则无法删除条目。见鬼,您忽略了
printf
的返回值。但是,如果没有调用它,您会非常惊讶。

在C中,您必须明确声明函数不接收任何参数这一事实。例如:

int f(void)
{
    printf("wow\t");
}

int main()
{
    f(f());
    return 0;
}
给出:

error: too many arguments to function ‘f’

在C++中,它是不同的。code>intf(){}
相当于
intf(void){}

您自己理解代码吗?递归在哪里?递归是在玩捉迷藏……在C中,你必须明确地告诉编译器函数不应该有任何参数,也就是说函数是“代码>空格f(空隙)< /代码>。