扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
函数的调用是借助”栈“来实现,
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名申请、雅安服务器托管、营销软件、网站建设、颍州网站维护、网站推广。
系统将整个程序运行时所需的数据空间安排在一个栈中,
每当调用一个函数时,就在栈顶分配一个存储区,进行压栈操作,
每当一个函数退出时,就释放它的存储区,进行出栈操作,
当前时刻正在运行的函数永远都在栈顶位置
至于会不会变成死循环,这要看函数内部的具体实现
比如
# include stdio.h
f();
g();
int main(void)
{
f();
return 0;
}
f()
{
printf("AAAAAA\n");
g();
}
g()
{
printf("BBBBB\n");
f();
}
f()调用g() 压栈
g()又调用f() 还是压栈
这种情况就类似于死循环,但是运行时不会永远输出
原因就是函数的调用在栈中执行
栈是有一定的空间
当栈空间用完即发生栈溢出时输出就会终止
仅供参考!
互相反复调用,一方面是死循环,另一方面,系统资源堆栈会耗尽。
我们可以加一个循环控制条件,让它只循环有限次结束。
#include stdio.h
int a=1,b=9;
int k=0,k_m=10; // 用k 记录次数,设最多次数为 k_m
int change();
int change1();
int main(){
change();
return 0;
}
int change(){
int i;
k++; if (k k_m) return 1; // 次数满了,结束程序
for(i=0;i2;i++) {
printf("a=%d\n",a);
change1();
}
return 0; // 正常返回0
}
int change1(){
int i1;
k++; if (k k_m) return 2; // 次数满了,结束程序
for(i1=0;i12;i1++) {
printf("b=%d\n",b);
change();
}
return 0; // 正常返回0
}
这就没问题了。
定义和声明可以分开的。先声明两个函数,然后再后面再写函数体就可以了。比如
void A();
void B();
void A()
{
B();
return;
}
void B()
{
A();
return;
}
在最上面声明每个函数。
这样任何一个函数,都可以调用其它函数。
不过 互相调用要注意,不要出现死循环
即a调用b, b再调用a。。。 无限下去,会出现栈溢出,程序崩溃的。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流