解释c程序的输出

解释c程序的输出,c,for-loop,static,C,For Loop,Static,输出结果是一个无限循环。请解释。您正在从主函数调用主函数。调用新的主函数后,它将打印一些字符串,然后再次调用主函数 您的i变量根本不会递增,因为它在for循环的第一次迭代中不会递增。在您调用main之后,它将永远不会返回到上一个main,直到for循环的下一次迭代发生。所以循环是无限的,i等于1。即使将for循环更改为任何其他循环,该循环仍然是无限的 我将包含您修复的代码,只是为了好玩: #include<stdio.h> main() { static int i=1;

输出结果是一个无限循环。请解释。

您正在从主函数调用主函数。调用新的主函数后,它将打印一些字符串,然后再次调用主函数

您的i变量根本不会递增,因为它在for循环的第一次迭代中不会递增。在您调用main之后,它将永远不会返回到上一个main,直到for循环的下一次迭代发生。所以循环是无限的,i等于1。即使将for循环更改为任何其他循环,该循环仍然是无限的

我将包含您修复的代码,只是为了好玩:

#include<stdio.h>
main()
{
    static int i=1;
    printf("\nSoftware");                                                                   
    for(;i<5;i++)
        main();
    return 0;
}

代码一次又一次地调用main函数

#include<stdio.h>

int main()
{
    static int i=0;
    if(i>=5) return 0;
    i++;
    printf("\nSoftware %i", i);
    main();
    return 0;
}

这是一种递归调用。您的主函数正在调用自身,从而产生一个无限循环。

i当循环的一次迭代完成时,i的值递增。但在增量之前,它再次调用主函数。因此,您的代码处于无限循环中。

它不是无限循环

您正在递归地调用main,但从未结束它。这会导致堆栈溢出


i++永远不会被计算,因为您永远不会到达for循环作用域的末尾。

这似乎没有什么困难或不同。在这个程序中,for循环无关紧要,因此每当在同一个程序中调用main时,它肯定是一个无限循环。使用条件语句可以限制无限循环。另外,静态int一点也不重要。所以很明显,main会被调用无限次,直到超时发生。
这实际上是不言自明的

在循环中调用main函数会消耗所有内存并导致堆栈溢出

是的,输出肯定是无限的,因为在for中;当你递归调用一个函数时,你必须有一些终止条件,每次调用都必须朝着这个终止条件前进,否则你将永远循环,或者直到堆栈空间耗尽并崩溃。这里的主调用发生在i++之前,因此没有任何进展。@AyeshaGupta。。。再次阅读for循环…这是一个非常简单的问题…@Ayesha:首先查看我的答案Classic stack Overflow,注意到我没有被递增,所以+1。然而,它不是一个无限循环。这是一个无限递归,当然会在某个时候崩溃-但是为什么它不会递增呢?@AyeshaGupta因为要递增它,main必须返回循环。这不会发生,所以也不会发生增量。这是因为for循环仅在第一次迭代完成后才执行i++。在这种情况下,它永远不会完成。因为main在for循环的下一次迭代中永远不会返回到上一个main。static但对于每个调用,它会再次创建。对于每个调用,它不会再次创建,只是不会递增,请参阅我的代码示例:在那里它递增并保持其值。
for(;i<5;i++)
main();
void myFunc()
{
   printf("\nSoftware"); 
}

main()
{
    static int i=1;                                                                
    for(;i<5;i++)
        myFunc();
    return 0;
}
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;
}