学习嵌入式第十天

函数的嵌套调用

c语言的函数定义是互相平行的、独立的,也就是说,在定义函数时,一个函数内不能包含另一个函数。c语言不能嵌套定义函数但是可以嵌套调用函数。

值传递:C语言在传递参数时采用的是值传递的特性。当一个函数被调用时,实际上传递的是参数的一个复制值,而不是参数本身。形参与实参拥有不同的内存空间,这也意味着无法在被调函数中修改主调函数的实参。

调用一个有参函数时必须要传参,在需要传递多个参数时传参的顺序时自左向右传参。

函数的递归调用

在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用。

直接调用的程序例如:

 间接调用的程序比如:  

int fn1()                           int fn2()

{                                        {

        fn2();                        fn1();

}                                        }

栈区和堆区是两种主要的内存分配区域,它们各自有不同的特点和用途:

栈区遵循先进后出的原则,主要由于存储局部变量和函数用的上下文信息,当一个函数被调用时,它的局部变量和参数会被自动分配到栈上,栈的大小通常有限;堆的大小通常比栈大的多,用于存放大小可变,存放时间长的数据。

保护现场和恢复现场

当一个函数被调用时,需要保存当前函数的执行状态,包括参数传递、返回地址、局部变量等,这个过程通过将这些状态入栈来实现。

在函数调用结束时,通过出栈操作来恢复上述的这些状态,使函数可以继续执行的操作叫做恢复现场。

递归程序举例:

计算斐波那契数列前n项和

 

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值