函数嵌套调用

我们学习了函数的定义和使用,那么,函数在被调用之前,必须先进行定义或者声明。

如下是一个程序测试例子:

 

程序运行结果如下:

 

可以看到,在main函数中调用了func函数。就是说:函数调用了函数;那么,我们称为:函数嵌套调用

注意:不能够在函数中定义函数,就是不能够“嵌套定义函数”。我们不可以把func函数的定义放在main函数的定义中。例如:

int main(int argc, char* argv[])

{

//定义func函数

void func(int a)

{

printf("in func, a = %d\n", a);

}

func(6);

return 0;

}

注意:这样的代码,在VC编译器,或者Visual Studio编译器中,是非法定义的代码。

这样的代码是错误的,虽然在func函数的调用之前,定义了func函数。但是,不能够在main函数中定义func函数,就是不能够嵌套定义函数。

但是,在Ubuntu系统的GCC编译器中,支持嵌套定义函数的语法。

虽然GCC支持这样的语法,但是,我们不建议嵌套定义函数。这样的语法,是不提倡的写法。不便于代码的移植。

但是,函数可以嵌套调用,就是在函数的定义中,调用其他函数,程序测试例子如下:

注意:下面的例子,作者举例有些复杂,在分析的过程中,还分析函数的返回值等数据的传递。如果只是说明函数的嵌套调用,那么,没有那么复杂。很简单,就是:在一个函数中,调用一个函数,这就是函数的嵌套调用。

下一章节,我们讲解函数的递归调用,才是重点。

 

程序运行结果如下:

 

我们来分析该程序的执行过程如下:

(1) 定义了main函数,是程序的入口地址;程序从main函数开始执行;

(2) 在main函数中调用func3函数,执行到 int x = func3(); 代码的时候,就跳转到func3函数执行;

(3) 在func3函数中调用func2函数,执行到 int c = func2(); 代码的时候,就跳转到func2函数执行;

(4) 在func2函数中调用func1函数,执行到int b = func1(); 代码的时候,就跳转到func1函数执行;

(5) 此时,一步一步嵌套调用函数,调用到func1函数,执行func1函数体定义的代码,执行:

printf("in func1, a = %d\n", a);

输出调试代码,然后,执行return a; 返回变量a的值;

(6) 结束func1函数的调用,返回到func2函数的int b = func1(); 代码,此时,把func1函数的返回值赋给变量b,那么,变量b得到func1函数的返回值10。

(7) 继续执行func2函数的代码:

printf("in func2, b = %d\n", b);

return b;

此时,在func2函数中输出信息,然后,返回变量b的值;

(8) 结束func2函数的调用,返回到func3函数的int c = func2(); 代码,此时,把func2函数的返回值赋给变量c,那么,变量c得到func2函数的返回值12。

(9) 继续执行func3函数的代码:

printf("in func3, c = %d\n", c);

return c;

输出调试信息,然后,返回变量c的值。最终,结束func3函数的调用,返回到main函数的int x = func3(); 代码,此时,结束func3函数的调用,把返回值赋给变量x。在main函数中输出变量x的值。执行完main函数之后,结束程序的运行。

通过这个程序的分析,我们知道了函数的嵌套调用,就是在函数中调用函数。碰到调用函数时,就跳转到函数定义的函数体中运行。例如,在main函数中调用func3函数的时候,就跳转到func3函数定义函数体中运行。

  • 12
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

韦凯峰Linux编程学堂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值