函数的嵌套调用
c语言的函数定义是互相平行的、独立的,也就是说,在定义函数时,一个函数内不能包含另一个函数。c语言不能嵌套定义函数但是可以嵌套调用函数。
值传递:C语言在传递参数时采用的是值传递的特性。当一个函数被调用时,实际上传递的是参数的一个复制值,而不是参数本身。形参与实参拥有不同的内存空间,这也意味着无法在被调函数中修改主调函数的实参。
调用一个有参函数时必须要传参,在需要传递多个参数时传参的顺序时自左向右传参。
函数的递归调用
在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用。
直接调用的程序例如:
间接调用的程序比如:
int fn1() int fn2()
{ {
fn2(); fn1();
} }
栈区和堆区是两种主要的内存分配区域,它们各自有不同的特点和用途:
栈区遵循先进后出的原则,主要由于存储局部变量和函数用的上下文信息,当一个函数被调用时,它的局部变量和参数会被自动分配到栈上,栈的大小通常有限;堆的大小通常比栈大的多,用于存放大小可变,存放时间长的数据。
保护现场和恢复现场
当一个函数被调用时,需要保存当前函数的执行状态,包括参数传递、返回地址、局部变量等,这个过程通过将这些状态入栈来实现。
在函数调用结束时,通过出栈操作来恢复上述的这些状态,使函数可以继续执行的操作叫做恢复现场。
递归程序举例:
计算斐波那契数列前n项和