以下程序的输出

时间:2013-12-28 18:45:57

标签: c main argc

#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但是如何使用它?

2 个答案:

答案 0 :(得分:4)

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

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

C11:5.1.2.2.1程序启动:

  

程序启动时调用的函数名为main。实施宣布否   这个功能的原型。它应定义为返回类型int且没有   参数:

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

或有两个参数(此处称为argcargv虽然任何名称都可能是   使用 1 ,因为它们是声明它们的函数的本地代码:

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

或等同物; 10)或以某种其他实现定义的方式。

现在,您可以为argcargv添加任何名称。此处argck。由于您没有将参数传递给maink的值为1,因为此处argv[0]是程序的名称。现在,k=1被程序用作初始值和值

10 9 8 7 6 5 4 3 2 

通过main的递归调用打印。


<子> 1。重点是我的。

答案 1 :(得分:0)

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