#include<stdio.h>
main()
{
static int i=1;
printf("\nSoftware");
for(;i<5;i++)
main();
return 0;
}
输出结果是一个无限循环。请解释。
您正在从主函数调用主函数。调用新的主函数后,它会打印一些字符串,然后再次调用主函数。
您的i变量根本不会增加,因为它不会在 for 循环的第一次迭代中增加。在你调用main之后,它永远不会返回到前一个 main 到 for 循环的下一次迭代发生。所以循环将是无限的,i将等于1。即使您将 for 循环更改为任何其他循环,循环仍将是无限的。
我将您修复的代码包括在内,只是为了好玩:
#include<stdio.h>
int main()
{
static int i=0;
if(i>=5) return 0;
i++;
printf("\nSoftware %i", i);
main();
return 0;
}
这不是一个无限循环。
您正在递归调用main
,但永远不会结束它。这会导致堆栈溢出。
i++
永远不会被评估,因为你永远不会到达for
循环的结束。
当 Loop 的一次迭代完成时,i的值会增加。但是在您的情况下,在增量之前它再次调用main()函数。因此,您的代码处于无限循环中。
这似乎没有什么困难或不同。在这个程序中 for 循环无关紧要,所以每当在同一个内部调用 main() 时,它肯定是一个无限循环。使用条件语句可以限制无限循环环形。此外,静态 int 根本无关紧要。所以显然 main 会被无限次调用,直到发生超时。这实际上是不言自明的
在循环中调用 main 函数会占用所有内存并导致堆栈溢出。
是的,输出肯定是无限的,因为for(;i<5;i++)
增量i
仅发生在 for 循环的最后一行。所以,这里的值i
从不增加。例如:
for(i=0;i<5;i++)
{
int a,b; // just an example
a=10;
b=20;
printf("%d",i);
printf("%d %d",a,b);
// increment of i takes place here at the last line of for loop
}
也和这里一样:
main()
{
static int i=1;
printf("\nSoftware");
for(;i<5;i++)
{
main();
// increment of i takes place here.But compiler never comes at this line .That's why i never incremented .
}
return 0;
}
代码调用main函数,一次又一次
for(;i<5;i++)
main();
它是一种递归调用。您的主要功能正在调用自身,从而导致无限循环。
i<5 调用 main()
i<5 调用 main()
i<5 调用 main()
...
如果你想调用某个函数 5 次。
void myFunc()
{
printf("\nSoftware");
}
main()
{
static int i=1;
for(;i<5;i++)
myFunc();
return 0;
}
我习惯了 C++,所以这可能是一个小错误。