-3
#include <stdio.h>

int main(int k)
{
    if(k<10)
            printf("%d ",main(k+1));
    return k;
}

输出是:

10 9 8 7 6 5 4 3 2

在函数的参数中main(),它argc是如何在这里使用的呢?

4

2 回答 2

4

首先,您的签名main是标准定义的。你的编译器应该给出警告:

[Warning] 'main' takes only zero or two arguments [-Wmain]  

C11:5.1.2.2.1 程序启动:

程序启动时调用的函数名为main. 实现没有声明这个函数的原型。它应定义为返回类型int且不带参数:

int main(void) { /* ... */ }

或带有两个参数(这里称为argcand argv尽管可以使用任何名称1,因为它们对于声明它们的函数是本地的):

int main(int argc, char *argv[]) { /* ... */ }

或等价物;10) 或以其他一些实现定义的方式。

现在,您可以为argc和指定任何名称argv。这里argck。由于您没有将参数传递给mainisk因为1这里argv[0]是程序的名称。现在k=1被程序用作初始值和值

10 9 8 7 6 5 4 3 2 

通过递归调用打印main


1.重点是我的。

于 2013-12-28T18:48:52.173 回答
0

您已将 main 函数用作递归函数,因此当您使用参数 1 调用它时,它将堆栈 main 函数,而 k 达到 10 的值,然后它将堆栈出列并按相反顺序打印值。你通过 ,2,3,..10 并且在堆栈出队后它将打印 10,9,..2

于 2013-12-28T18:55:55.427 回答