c语言:函数(2)

1.函数参数和函数的值

    1.形式参数和实际参数

      在调用函数时,大多数情况下,主调函数和被调用函数之间有数据传递关系。在定义函数时函数名后面括号中的变量名称为“形式参数”(简称“形参”),在主调函数中调用一个函数时,函数名后面括号中的参数(可以是一个表达式)称为“实际参数”(简称“实参”)。

    说明:1)在定义函数中指定的形参,在未出现函数调用时,它们并不占内存中的存储单元。只有在发生函数调用时,函数max中的形参才被分配内存单元。在调用结束后,形参所占的内存单元也被释放。       

              2) 实参可以是常量、变量或表达式。但要求它们有确定的值。在调用时将实参的值赋给形参。

                3)在被定义的函数中,必须指定形参的类型。

                 4)实参与形参的类型应相同或赋值兼容。

                 5)在C语言中,实参向形参的数据传递是“值传递”,单向传递,只由实参传给形参,而不能由形参传回来给实参。

                 注: 在调用函数时,给形参分配存储单元,并将实参对应的值传递给形参,调用结束后,形参单元被释放,实参单元仍保留并维持原值。因此,在执行一个被调用函数时,形参的值如果发生改变,并不会改变主调函数的实参的值。

    2.函数的返回值

        (1)函数的返回值是通过函数中的return语句获得的。return语句将被调用函数中的一个确定值带回主调函数中去。

        (2)函数值的类型。既然函数有返回值,这个值当然应属于某一个确定的类型,应当在定义函数时指定函数值的类型。

        (3)在定义函数时指定的函数类型一般应该和return语句中的表达式类型一致。

         如果函数值的类型和return语句中表达式的值不一致,则以函数类型为准。对数值型数据,可以自动进行类型转换。即函数类型决定返回值的类型。

        (4)对于不带回值的函数,应当用“void"定义函数为“无类型”(或称“空类型”)。这样,系统就保证不使函数带回任何值,即禁止在调用函数中使用被调用函数的返回值。此时在函数体中不得出现return语句。

2.函数的调用

     1.  函数调用的一般形式             函数名(实参表列)

     函数参数传递的顺序是自右向左。实参和形参个数相等,类型匹配。函数调用的本质是进行函数跳转。

    2.函数调用的方式

      1.函数语句 (把函数调用作为一个语句。这时不要求函数带回值,只要求函数完成一定的操作。)

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

     3.函数参数   (函数调用作为一个函数的实参)

3.函数的嵌套使用

    

 (1)执行 main 函数的开头部分;

(2)遇函数调用语句,调用函数a,流程转去a函数;

(3)执行a函数的开头部分;

(4)遇函数调用语句,调用函数b,流程转去函数 b;

(5)执行b函数,如果再无其他嵌套的函数,则完成b函数的全部操作;

(6)返回到a函数中调用b函数的位置;

(7)继续执行a函数中尚未执行的部分,直到a函数结束;

(8)返回 main 函数中调用a函数的位置;

(9)继续执行main函数的剩余部分直到结束,

指令集(复杂指令集和精简指令集)

形参和局部函数变量都被放在栈区

栈区:  遵循先进后出,后进先出的原则。

出栈:恢复现场                     入栈:保护现场。

4.函数的递归调用

   有直接调用和间接调用。

无条件的函数递归调用,会使栈区消耗殆尽,从而导致程序崩溃。

练习  求:n的阶乘

求斐波那契前n项的和

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值