解释c程序的输出

时间:2013-07-22 10:34:51

标签: c for-loop static

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

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

8 个答案:

答案 0 :(得分:3)

您正在通过功能调用功能。调用新的main函数后,它将打印一些字符串,然后再调用 main 函数。

您的 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;
}

答案 1 :(得分:1)

这不是一个无限循环。

你递归地呼叫main但永远不会结束它。这会导致堆栈溢出。

永远不会评估

i++,因为您永远不会到达for循环的范围结束。

答案 2 :(得分:1)

这似乎没有任何困难或不同。在这个程序for循环中并不重要,因此每当在同一个内部调用main()时它肯定是一个无限循环。使用条件语句你可以限制无限循环。此外,静态int根本不重要。所以很明显,主要被称为无限次,直到超时发生。 这实际上是不言自明的

答案 3 :(得分:1)

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

答案 4 :(得分:1)

是的,输出肯定是无限的,因为在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;
}

答案 5 :(得分:0)

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

for(;i<5;i++)
main();

答案 6 :(得分:0)

它是一种递归调用。你的主要功能是调用自身导致无限循环。

答案 7 :(得分:0)

i&lt; 5 call main()
   我&lt; 5呼叫main()
      我&lt; 5呼叫main()
         ...

如果你想调用一些功能5次。

包括

void myFunc()
{
   printf("\nSoftware"); 
}

main()
{
    static int i=1;                                                                
    for(;i<5;i++)
        myFunc();
    return 0;
}

我习惯了c ++所以这可能是一个小错误。

相关问题