|
函数调用实际上是一个程序执行顺序的"转移"。在一个函数调用另一个函数的情况下,当程序执行到这个函数的调用语句时,将由这个函数转为执行被调用的函数。当被调用函数执行完毕后,又将程序执行的控制权返回到这个调用函数,继续执行这个函数中后面的语句部分。可见,函数调用的过程从调用函数来讲,包含了转出和返回这两个过程。
|
|
|
在程序中是通过对函数的调用来执行函数体的,其过程与其他语言的子程序调用相似。在C语言中,函数调用的一般形式为:
|
|
|
|
对无参数函数调用时则无实际参数表。实际参数表中的参数可以是常数、变量或其他构造类型数据及表达式。各实参之间用逗号分隔,函数调用大体上可以有以下几种方式。
|
|
|
|
函数作为表达式中的一项出现在表达式中,以函数返回值参与表达式的运算。这种方式要求函数有返回值。例如:z=max(x,y)是一个赋值表达式,把max的返回值赋予变量z。
|
|
|
|
函数调用的一般形式加上分号即构成函数语句。例如:"printf ("%d",b);""scanf ("%d",&b);"都是以函数语句的方式调用函数。
|
|
|
|
函数作为另一个函数调用的实参出现。这种情况是把该函数的返回值作为实参进行传送,因此要求该函数必须有返回值。例如:"printf("%d",max(x,y));"把max调用的返回值又作为printf函数的实参来使用。在函数调用中还应该注意的一个问题是求值顺序的问题,在C语言中对实参表中的各实参是自右至左使用的。
|
|
|
除了函数调用的一般形式外,还必须特别注意函数调用的两种特殊情况。
|
|
|
|
函数的嵌套调用是指在调用一个函数的过程中,还可以再调用另一个函数。
|
|
|
|
函数的递归调用是一种特殊的嵌套调用。在调用一个函数的过程中,需要直接或者间接地调用该函数自身,这种情况称为函数的递归调用。例如,求n!的递归函数如下:
|
|
|
|
采用递归方式能使程序更为紧凑,但会增加内存空间,降低执行速度。
|
|
|