c++的函数互相调用,不会一直循环,这个是为什么,请具体高手解释一下
#include<iostream>usingnamespacestd;voidA();voidB();voidmain(){A();}voidA(){cout<<"函数...
#include<iostream>
using namespace std;
void A();
void B();
void main()
{
A();
}
void A()
{
cout<<"函数a\n";
B();
}
void B()
{
cout<<"函数b\n";
A();
}
这个是我在c++6.0的环境下的程序,在范磊的c++视频里有这个例程,这个程序,看上去应该是a函数和b函数无限循环的调用,但是实际情况并非如此,程序运行的时候,确实能够互相调用,但是一会就会显示press any key to continue 然后一切就结束了,
我没明白 是什么原因中断了函数之间的循环调用,请帮忙解释一下
怎么修改才能让这种函数的调用更长一点或者无限循环下去呢?
我现在基本可以确定, afeihito和 RunZhi_Strif 的说法是正确的,我即将关闭问题,但是这个问题的延续,希望大家可以继续指点一下我,比如还是说,怎么在函数互相循环调用的时候不会退出之类的问题。
当然,创造一个循环然后不停的进出一个函数这个方法就不要再讲了 展开
using namespace std;
void A();
void B();
void main()
{
A();
}
void A()
{
cout<<"函数a\n";
B();
}
void B()
{
cout<<"函数b\n";
A();
}
这个是我在c++6.0的环境下的程序,在范磊的c++视频里有这个例程,这个程序,看上去应该是a函数和b函数无限循环的调用,但是实际情况并非如此,程序运行的时候,确实能够互相调用,但是一会就会显示press any key to continue 然后一切就结束了,
我没明白 是什么原因中断了函数之间的循环调用,请帮忙解释一下
怎么修改才能让这种函数的调用更长一点或者无限循环下去呢?
我现在基本可以确定, afeihito和 RunZhi_Strif 的说法是正确的,我即将关闭问题,但是这个问题的延续,希望大家可以继续指点一下我,比如还是说,怎么在函数互相循环调用的时候不会退出之类的问题。
当然,创造一个循环然后不停的进出一个函数这个方法就不要再讲了 展开
3个回答
展开全部
说一下我的看法吧:
vc6.0里面很容易就能写出无限循环的程序。
但楼主这种情况不行。为什么呢?
像这种嵌套调用时,比如循环调用了A()6000次,在第6001次调用时,第一次调用的A函数并没有退出。一直保存在堆栈里面。不像一般函数那样执行玩了就注销掉了所用的内存。可以说,第6001次的A()也是由第一次的A()间接调用的
而且我们知道,控制台应用程序是仿dos的(当然,这样说并不准确)。它的栈空间一定是有个上限的。达到一定程度,程序就终止执行。
和下面这个无限循环程序比较下:运行后,输入a,回车。这是别人的一个提问的内容:
#include<iostream>
using namespace std;
void main()
{
int x;
long y;
printf("请输入您本次要存入几个学生的信息,提示在0到30之间,输入为纯数字:");
scanf("%d",&x);
while(x>30||x<0)
{
printf("输入错误,请重新输入您本次要输入的学生信息的人数,在0到30之间:");
scanf("%d",&x);
}
}
这是个无限循环,他也许可以一直无限循环下去,但是他没有占用多少栈空间。所以程序不会停止。(我也没确定运行久了会不会停止)
vc6.0里面很容易就能写出无限循环的程序。
但楼主这种情况不行。为什么呢?
像这种嵌套调用时,比如循环调用了A()6000次,在第6001次调用时,第一次调用的A函数并没有退出。一直保存在堆栈里面。不像一般函数那样执行玩了就注销掉了所用的内存。可以说,第6001次的A()也是由第一次的A()间接调用的
而且我们知道,控制台应用程序是仿dos的(当然,这样说并不准确)。它的栈空间一定是有个上限的。达到一定程度,程序就终止执行。
和下面这个无限循环程序比较下:运行后,输入a,回车。这是别人的一个提问的内容:
#include<iostream>
using namespace std;
void main()
{
int x;
long y;
printf("请输入您本次要存入几个学生的信息,提示在0到30之间,输入为纯数字:");
scanf("%d",&x);
while(x>30||x<0)
{
printf("输入错误,请重新输入您本次要输入的学生信息的人数,在0到30之间:");
scanf("%d",&x);
}
}
这是个无限循环,他也许可以一直无限循环下去,但是他没有占用多少栈空间。所以程序不会停止。(我也没确定运行久了会不会停止)
追问
额.现在我也算大体了解了,我觉得你的说法比较靠谱,就是你的写法怎么看怎么是C语言……
展开全部
这确实是无限互相调用,但是你用的是VC++吧,VC会判断这是无限递归,之后就会自动终止程序,所以没有一直运行下去。
更多追问追答
追问
无限递归都会被vc中断?假如是一个有意义的无限递归,有办法不让vc终止吗?
追答
如果是有意义的无限递归,那么各个函数中的变量的值一定会有变化,否则肯定是无意义的无限递归,因为函数中的值一直没有变,它也就只能永不变换的递归下去。如果是循环的话,就不会有这个问题,死循环,VC都不会退出的,我记得是这样的,可能不准确。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
栈空间不足(被用光了),程序被VC关掉了。
这个程序本身,从理论上来说,应该是无穷无尽的。
这个程序本身,从理论上来说,应该是无穷无尽的。
追问
按照你的说法,那么怎么才能够无尽的循环呢?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询