1.1函数调用的形式

一般形式:

函数名实参表列

  1. 函数调用语句

    把函数调用单独作为语句。

  2. 函数表达式

    函数调用出现在另一个表达式中,如“c=max(a,b);”, max(a,b)是一次函数调用,它是赋值表达式中的一部分。这时要求函数带回一个确定的值以参加表达式的运算。例如:

    c = 2*max(a,b);

  3. 函数参数

    函数调用作为另一个函数调用时的实参。列如:

    m = max(a,max(b,c));

1.2函数调用时的数据传递

  1. 形式参数和实际参数

    在调用有参函数时,主调函数和被调用函数之间有数据传递关系。从前面已知:在定义函数时函数名后面括号中的变量名称为“形式参数“(简称“形参”)或“虚拟参数”。在主调函数中调用一个函数时,函数名后面括号中的参数称为“实际参数”(简称“实参”)。实际参数可以是常量、变量或表达式。

  2. 实参和型参的数据传递

    在调用函数过程中,系统会把实参的值传递给被调用函数的形参。或者说,形参从实参得到一个值。该值在函数调用期间有效,可以参加该函数中的运算。

1.3函数调用的过程

  1. 在定义函数中指定的形参,在未出现函数调用时,它们并不占内存中的存储单元。在发生函数调用时,函数max的形参被临时分配内存单元。

  2. 将实参对应的值传递给形参。实参的值为2,把⒉传递给相应的形参x,这时形参x就得到值2,同理,形参y得到值3。

  3. 在执行max函数期间﹐由于形参已经有值﹐就可以利用形参进行有关的运算(例如把x和y比较,把x或y的值赋给z等)。

  4. 通过return语句将函数值带回到主调函数。应当注意返回值的类型与函数类型一致。如max函数为int型,返回值是变量z,也是int型。二者一致。

  5. 调用结束,形参单元被释放。注意:实参单元仍保留并维持原值,没有改变。如果在执行一个被调用函数时,形参的值发生改变,不会改变主调函数的实参的值。

1.4函数的返回值

  1. 函数的返回值是通过函数中的return语句获得的。

  2. 函数值的类型

    注意:在定义函数要指定函数的类型。

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

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

  4. 对于不带返回值的函数,应当用定义函数为“void类型”(或称“空类型”)。

C语言中不允许作嵌套的函数定义。因此各函数之间是平行的,不存在上一级函数和下一级函数的问题。但是C语言允许在一个函数的定义中出现对另一个函数的调用。这样就出现了函数的嵌套调用。即在被调函数中又调用其它函数。这与其它语言的子程序嵌套的情形是类似的。