首页 理论教育 调用函数需注意实参与形参匹配,函数可作为表达式参与运算

调用函数需注意实参与形参匹配,函数可作为表达式参与运算

时间:2023-11-23 理论教育 版权反馈
【摘要】:实参的个数、类型和顺序应该与被调用函数的形参所要求的个数、类型和顺序一致,才能正确地进行参数传递。函数作为表达式的一项,出现在主调函数的表达式中,以函数返回值参与表达式的运算。再如,例6.2和例6.3中的函数调用也是函数语句的方式。这种情况是把被调用函数的返回值作为实参进行传送,因此要求被调用函数必须是有返回值的。

调用函数需注意实参与形参匹配,函数可作为表达式参与运算

1.函数调用的一般形式

C语言中,函数调用的一般形式为:函数名([实际参数表])。

调用无参函数时,缺省实际参数表,但圆括号不能省略。实际参数表中的参数可以是常量、变量或表达式。如果实参不止一个,则相邻实参之间用逗号“,”分隔。

实参的个数、类型和顺序应该与被调用函数的形参所要求的个数、类型和顺序一致,才能正确地进行参数传递。

例如,例6.1中的函数调用“num=max(num1,num2);”,其实参个数、类型和顺序都与被调用函数max()的形参所要求的个数、类型和顺序一致。

2.函数调用的方式

按函数在程序中出现的位置,可分为以下3种函数调用方式。

(1)函数表达式。函数作为表达式的一项,出现在主调函数的表达式中,以函数返回值参与表达式的运算。这种方式要求函数是有返回值的。

例如,例6.1中的“num=max(num1,num2);”是一个赋值表达式语句,把max()函数的返回值赋予变量num。

(2)函数语句。C语言中的函数可以只进行某些操作而不返回函数值,这时的函数调用可作为一条独立的语句,相当于其他语言中的子程序。这种方式要求函数是无返回值的。

例如,前面各章用到的库函数printf()、scanf()函数等都是函数语句。再如,例6.2和例6.3中的函数调用也是函数语句的方式。

(3)函数实参。函数调用作为另一个函数调用的实际参数出现。这种情况是把被调用函数的返回值作为实参进行传送,因此要求被调用函数必须是有返回值的。这种调用方式的本质与(1)的调用方式相同。(www.xing528.com)

例如,例6.4中的“printf("1+2+3+…+100=%d\n",add());”语句和“printf("10!=%d\n",fact());”语句,把add()和fact()函数调用的返回值作为printf()函数的实参来使用。其执行过程是:先分别调用add()或fact()函数,然后将其返回值作为调用printf()函数的实参。

3.说明

(1)调用函数时,函数名必须与具有该功能的自定义函数名完全一致。

(2)实参在类型上按顺序与形参必须一一对应和匹配。如果类型不匹配,C编译程序将按赋值兼容的规则进行转换。如果实参和形参的类型不赋值兼容,通常并不给出出错信息,并且程序仍然继续执行,只是得不到正确的结果。

(3)如果实参表中包括多个参数,对实参的求值顺序随系统而异。有的系统按自左向右顺序求实参的值,有的系统则相反。

【例6.7】函数实参的求值顺序。

这个程序在不同的编译系统中就会得到不同的结果。

应特别注意的是,无论是自左向右求值,还是自右向左求值,其输出顺序不变,即输出顺序总是和实参表中的顺序相同。

在程序设计中,应避免这种运行结果随编译系统而异的程序,上述程序可改为如下形式。

在VC++ 6.0系统下,这个程序的运行结果是:9,8,8,9。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈