函数的调用

一、函数参数 

1、实参向形参的数据传递是“值传递”,单向传递,只能有实参传给形参。函数的形参相当于实参的复制,对形参进行修改不会对实参产生影响。

2、无法在被调函数中修改主调函数的参数。

3、函数有两个参数或以上,c语言默认传参自右向左,结合的过程不可能同时传参。

4、栈区是计算机内存的一部分,主要用于存放函数的局部变量、函数参数和返回地址等信息。栈区遵循后进先出(LIFO, Last In First Out)的原则,最后压入栈中的数据先被弹出。在程序执行过程中,每当一个函数被调用,相关的变量和状态信息就会被压入栈中;当函数执行完毕,这些信息就会从栈中弹出。

注:(1)内存管理:栈区的内存由操作系统自动管理。函数调用时自动分配内存,函数返回时自动释放内存。

(2)大小限制:栈区的大小通常较小,受到操作系统和编译器的限制。过深的递归调用可能导致栈溢出。

还存在堆区:用于动态分配内存的区域。程序在运行时可以通过特定的函数请求内存。堆区的内存管理由程序员负责,需要手动释放,由于其动态特性,堆区的内存分配和释放可能会比较频繁。

字符串常量区:存放程序中所使用的字符串常量的地方。这些字符串在程序编译时就分配了内存,并且在程序运行时是只读的。修改它们会导致未定义行为。

静态区(全局区):用于存储全局变量、静态变量以及常量等。这个区域在程序加载时分配内存,并在程序结束时释放。静态变量和全局变量在程序的整个运行过程中都存在,生命周期与程序相同。

代码区:存放程序的可执行代码(指令)的区域。这个区域通常是只读的,以防止程序在运行时修改自己的指令。代码区在程序加载时就被加载到内存中。

二、函数的调用

1、函数语句

把函数调用作为 一个语句。

2、函数表达式

函数出现在一个表达式中,这种表达称为函数表达式,这是要求函数带回一个确定的值以参加表达式的运算 。

3、函数参数

函数调用作为一个函数的实参

三、函数的嵌套

1、C语言不能嵌套定义函数,但可以嵌套调用函数。

四、函数的递归

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

 2、用递归来求阶乘

int fn(int n)
{
    if(1 == n)
    {
        return 1;
    }
    else
    {
        return fn(n - 1) * n;
    }
}

 3、斐波那契数以及和

int fib(int n)
{
    if(1 == n || 2 == n)
    {
        return 1;
    }
    else
    {
        return fib(n - 1) + fib(n - 2);
    }
}
int sumOfFib(int n)
{
    if(1 == n)
    {
        return 1;
    }
    else
    {
        return sumOfFib(n - 1) + fib(n);
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值