6.3 函数的调用

将主调函数中的实参值传递给被调函数的形参,从而实现主调函数向被调函数的数据传送,然后被调函数再将函数返回值传递给主调函数,这样就实现了函数间的调用。

函数的调用是指被调函数在主调函数中的调用形式。在前面已经用到了很多次函数的调用。在C51语言中,函数的调用的一般形式如下。


函数名(实参列表)


其中,函数名即被调函数名,实参列表是主调函数传递给被调函数的实参变量。函数的调用通常有以下3种形式。

❑函数语句。这是最常用的表达形式,把函数作为一个语句,常用于无返回值的函数。直接输出结果的函数,也可以在主调函数中采用函数语句的形式。示例如下。


FUN1();


❑函数表达式。函数名出现在表达式中,常用于有返回值的函数,将函数的返回值直接赋值给主调函数中的变量。示例如下。


z=max(x,y);//函数max求x、y中的最大值


❑函数参数。将函数作为主调函数中另一个函数的参数,主要用于函数嵌套调用的情况。示例如下。


c=max(b,max(x,y));//函数min求x、y、b中的最大值


从函数调用的参数传递的方式,函数调用可分为赋值调用、引用调用、递归调用和嵌套调用。下面分别介绍这几种常用的函数调用方式。

6.3.1 赋值调用

赋值调用是指将主调函数中实参变量的值直接传递给被调函数中的形参,被调函数再将函数返回值传递给主调函数。赋值调用是C51语言中很常用的参数传递方式。赋值调用中,函数的形参是数值变量并把实参的值传递给函数形参而且主调函数中的实参变量的数值不会改变。

在C51语言中,常使用赋值调用来传递参数,因此一般不能改变函数调用时所用实参变量的值。赋值调用的程序示例如下。


include<stdio.h>//头文件

int square(int x);//函数声明

void main()//主函数

{

int t=10;

printf(“square(%d)=%d\n”,t,square(t));//函数赋值调用,并输出

printf(“t=%d\n”,t);//输出变量t的值

}

int square(int x)//定义函数

{

x=x*x;//计算平方

return(x);//返回结果

}


该程序可以在KeilµVision3编译环境中执行,运行的结果如下。


square(10)=100

t=10


在本例中,定义了函数square()用来计算平方值。将主函数中实参变量t的值10传递给函数square()的形参变量x,当函数体内执行x=x*x操作时,仅修改了函数内部的局部变量x的值。主函数中的实参变量t的值仍为10。从本例可以看出赋值调用不能改变主调函数中参数的值。