C语言基础(9)函数嵌套调用和递归调用

一、函数的嵌套调用

嵌套调用是指一个函数在其内部调用了另一个函数。

函数进行嵌套调用时要注意:

        参数传递形式为:值传递(对形参的修改不会影响到实参)即无法在被调函数中修改主调函数。

        函数有多个形参时,调用函数时参数传递的次序是自右向左

        传参时不要对同一个变量进行自加自减操作,容易造成错误。

        函数调用实际上是程序跳转到被调函数的位置执行被调函数后,再返回到主调函数。

二、递归调用

  • 递归调用是特殊的嵌套调用,其中一个函数直接或间接地调用自身。
  • 每次递归调用都会在栈上创建一个新的栈帧,直到达到递归的终止条件。

嵌套调用和递归调用的区别:

  • 嵌套调用是一个函数调用另一个函数,而递归调用是一个函数调用自身。
  • 递归调用通常需要一个基准条件来终止递归,以防止进入无限循环,而嵌套调用没有这样的要求。

在C语言中,函数调用过程依赖于栈来管理函数调用、局部变量、返回地址等。这是因为栈具有“后进先出”(LIFO)的特性,适合用于管理嵌套的函数调用。

        栈用来保存局部变量和临时数据以及返回地址。

        保护现场指的是在调用一个函数之前,保存当前函数的执行状态,以便在被调用函数执行完毕后能够正确地恢复并继续执行

        恢复现场指的是在被调用函数执行完毕返回之后,恢复原来的执行状态,以便继续执行调用函数。

        在函数调用过程中,保护现场和恢复现场是确保程序执行正确性的关键步骤。

        linux下,栈区空间大约为8M左右。

栈区用来存储局部变量、函数参数和函数调用的返回地址。栈区是内存的一部分,它采用先进后出(LIFO, Last In First Out)方式管理内存。

堆区是内存中的一部分,用于动态分配内存。与栈区不同,堆区的内存分配和释放由程序员手动进行。

字符串常量区用来存储程序中的字符串常量。

静态区用来静态变量和静态数据,其值在程序运行过程中不会改变。

全局区用来存储全局变量,所有函数都可以访问全局变量。

代码区用来存储程序的机器码,也就是实际执行的指令,代码区在程序加载时被加载到内存中,其大小通常由程序的代码量决定。

  • 栈区:用于存储局部变量、函数参数、返回地址等,由操作系统自动管理。
  • 堆栈:一般指栈的数据结构,用于函数调用和局部变量管理。
  • 堆区:用于动态内存分配,由程序员手动管理。
  • 栈帧:栈区中的一个内存块,与单个函数调用相关,存储函数的参数、局部变量和返回地址。
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值