我想知道传递给main()的arugment存储在内存中,它们只是在堆栈中存储.如果是,那么k的值是如何在下面的代码中初始化的
#include<stdio.h>
int main(int k)
{
if(k<10)
printf("%d ",main(k+1));
return k;
}
O/p: 10 9 8 7 6 5 4 3 2
Run Code Online (Sandbox Code Playgroud)
它通常存储在存储其他函数的参数的任何地方 - 可能是堆栈,寄存器或其他完全存储的地方.仅举几个例子:在SPARC上,它几乎肯定是一个寄存器; 在x86上(在32位模式下)它通常是堆栈; 在IBM大型机上,它通常位于堆栈框架中,该堆栈框架从堆中动态分配并链接在一起构建/销毁FIFO时尚的链表.
还要注意的是它能够/确实甚至一台机器有一个编译器的不同而不同 - 例如,微软VC++可以通过它在堆栈或取决于你用什么编译器旗(县)的寄存器.当/如果你在寄存器中传递它时,它(可能)会被推到函数内部的堆栈上(以允许递归).
顺便说一句,我还会注意到,虽然您的代码调用main完全合法C,但您不能使用mainC++ 调用.
编辑:对于初始值,传统上调用第一个参数argc,并告诉您在命令行上传递了多少个参数.如果你在没有命令行的情况下调用它(就像你显然那样),它通常应该从1(一个参数是程序本身的名称,传统上传递为argv[0])开始.例如,如果您调用的程序类似于:
prog a b c d e f g h i j k l m
Run Code Online (Sandbox Code Playgroud)
它通常会在没有打印任何内容的情况下退出,因为在第一个条目中main,参数将大于10,因此if语句的主体将永远不会执行.