该程序的输出
#include<stdio.h>
void f(void)
{
int s = 0;
s++;
if(s == 10)
return;
f();
printf("%d ", s);
}
int main(void)
{
f();
}
该程序的输出是什么! 我m分段故障......它是什么?该程序的输出
这里的问题是,你没有静态初始化s
。所以它会总是开始为0,每次你打电话f()
,和f()
不断调用自己一遍又一遍,但从来没有满足if(s == 10)
。调用堆栈最终溢出和繁荣,分段错误。
你的程序是一个无限循环;你会得到分段错误,因为你最终会溢出你的堆栈。
问题是你递归地调用f
,每次都不改变任何东西。你可能会遇到堆栈溢出。
每当您拨打f
时,都会将s
初始化为0
并对其进行增加。它永远不会达到10.
你应该做的是或者使s
参数为f
或者使s
静态。
由于s
是一个局部变量,因此每次递归调用f()
都会获得它自己的副本。因此,每次s
都将是1,并且您会收到堆栈溢出异常。
如何使变量s静态?
该程序进入无限循环。 原因是: s对f()是局部的,因此每当调用f()时,s都被初始化为0.然后它被加1,再次调用f()。这一次,f()使用其本地副本&将s初始化为0 &再次以递归方式调用f()。这会产生无限循环&该程序会产生分段故障。由于递归无限调用,seg故障的原因是堆栈溢出。 要解决此问题,请将其设为静态或使其成为全局,而不是本地。
这是一个自我调用的递归函数。但是,这是一个无限循环,因为每次调用计数器时,int s = 0;
都会重置计数器。它将打印一个无穷无尽的0行。
样品溶液:
int main (void) {
f(0);
}
void f (int s) {
if (s == 10)
return;
printf("%d ", s);
f(s++);
}
我不擅长与C语法,但这个想法是合理的。
无限循环。这可能是类似的东西你想
#include<stdio.h>
void f(int s)
{
s++;
if(s == 10)
return;
f(s);
printf("%d ", s);
}
int main(void)
{
f(0);
}
这可能是一个更有趣的节目是什么:
void f(int s)
{
s++;
if(s == 10)
return;
f(s);
printf("%d ", s);
}
int main(void)
{
f(0);
}
,将打印:
9 8 7 6 5 4 3 2 1
或者你可以只声明'static int s = 0;'而是。 – torak 2010-08-26 18:41:05
这个程序的输出是这个网站的名称。
正如其他人建议应声明s
作为static int s = 0
是什么阻止你在逃避吗? – codaddict 2010-08-26 17:43:10
然后输出是分段错误错误。 – BoltClock 2010-08-26 17:43:13
就是这样!!!!!!!! – 2010-08-26 17:50:58