学科分类
目录
C语言

函数的调用方式

函数可以在main()函数中调用,也可以被其他函数调用。在调用函数时,要求实参与形参必须满足三个条件:个数相等、顺序对应、类型匹配。

根据函数在程序中出现的位置,其调用方式可以分为以下4种:

1、将函数作为表达式调用

将函数作为表达式调用时,函数的返回值参与表达式的运算,此时要求函数必须有返回值。示例代码如下:

int a=max(10,20);

此行代码中,函数max()为表达式的一部分,max()函数的返回值被赋给整型变量a。

2、将函数作为语句调用

函数以语句的形式出现时,可以将函数作为一条语句进行调用,示例代码如下:

printf("hello world!\n");

此行代码调用了输出函数printf(),此时不要求函数有返回值,只要求函数完成一定的功能。

3、将函数作为实参调用

将函数作为实参调用时,其实就是将函数返回值作为函数参数,此时要求函数必须有返回值。示例代码如下:

printf("%d\n",max(10,20));

此行代码将max()函数的返回值作为printf()函数的实参来使用。

4、函数嵌套调用

C语言中函数的定义是独立的,即不能在一个函数中定义另一个函数。但在调用函数时,可以在一个函数中调用另一个函数,这就是函数的嵌套调用。

下面通过一个案例演示函数的嵌套调用,具体如例1所示。

例1 nest.c

 1    #include <stdio.h>
 2    void printArr(int arr[])        //显示数组元素,函数参是int类型的数组名
 3    {
 4        int i;
 5        for (i = 0; i < 10; i++)
 6        {
 7            printf("%3d", arr[i]);
 8        }
 9    }
 10    void initArr()                    //数组元素填充
 11    {
 12        int arr[10], i;
 13        for (i = 0; i < 10; i++)
 14        {
 15            arr[i] = i;
 16        }
 17        printArr(arr);                //调用printArr()函数
 18    }
 19    int main()
 20    {
 21        initArr();
 22        return 0;
 23    }

例1运行结果如图1所示。

图1 例1运行结果

在例1中,第2~9行代码定义了printArr()函数,用于打印数组元素;第10~18行代码定义了initArr()函数,用于初始化数组;在initArr()函数中,第17行代码调用了printArr()函数;在main()函数中,第21行代码调用了initArr()函数。main()函数调用了initArr()函数,initArr()函数调用了printArr()函数,这就是函数嵌套调用。

图1描述了例1中的函数嵌套调用过程。

图1展示了程序中含有3层函数调用嵌套的情形,总共分为5个步骤,具体如下:

① 程序执行main()函数开头部分,遇到函数调用语句,调用initArr()函数,流程转向initArr()函数入口。

② 在initArr()函数体中遇到printArr()函数的调用,流程转向printArr ()函数入口。

③ printArr()函数调用完毕回到initArr()函数调用点。

④ initArr()函数调用完毕,跳转至main()函数部分。

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

点击此处
隐藏目录