【时时三省】(C语言基础)调用函数
山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省
定义函数的目的是为了调用此函数,以得到预期的结果。因此,应当熟练掌握调用函数的方法和有关概念。
函数调用的形式
调用一个函数的方法很简单,如前几篇见过的:
print_star ( );/ /调用无参函数
c = max ( a , b );/ /调用有参函数
函数调用的一般形式为
函数名(实参表列)
如果是调用无参函数,则“实参表列”可以没有,但括号不能省略,如果实参表列包含多个实参,则各参数间用逗号隔开。
按函数调用在程序中出现的形式和位置来分,可以有以下3种函数调用方式。
1.函数调用语句
把函数调用单独作为一个语句。如前几篇里的“printf_star ( );”,这时不要求函数带向值,只要求函数完成一定的操作。
2.函数表达式函数
调用出现在另一个表达式中,如“c = max ( a,b );”,max ( a,b )是一次函数调用,它是赋值表达式中的一部分。这时要求函数带回一个确定的值以参加表达式的运算。例如:
c = 2 * max ( a , b ) ;
3.函数参数
函数调用作为另一个函数调用时的实参。例如:
m = max ( a,max ( b , c ) );
其中,max ( b,c )是一次函数调用,它的值是b和c二者中的“大者”,把它作为max另一次调用的实参。经过赋值后,m的值是a,b,c三者中的最大者。又如:
printf ( " % d”, max ( a,b ) );
也是把max ( a,b )作为printf函数的一个参数。
说明:调用函数并不一定要求包括分号(如print star();),只有作为函数调用语句才需要有分号。如果作为函数表达式或函数参数,函数调用本身是不必有分号的。不能写成
printf ( " % d " , max ( a , b ););
/ /max ( a,b )后面多了一个分号
函数调用时的数据传递
1.形式参数和实际参数
在调用有参函数时,主调函数和被调用函数之间有数据传递关系。从前面已知:在定义函数时函数名后面括号中的变量名称为“形式参数”(简称“形参”)或“虚拟参数”。在主调数可以是常量、变量或表达式。函数中调用一个函数时,函数名后面括号中的参数称为“实际参数”(简称“实参”)。实际参数可以是常量,变量或表达式。
2.实参和形参间的数据传递
在调用函数过程中,系统会把实参的值传递给被调用函数的形参。或者说,形参从实参得到一个值。该值在函数调用期间有效,可以参加该函数中的运算。
在调用函数过程中发生的实参与形参间的数据传递称为“虚实结合”。
例题:
输入两个整数,要求输出其中值较大者。要求用函数来找到大数。
解题思路:
从两个数中找出其中的大者,现在的关键是要用一个函数来实现它。在定义函数时,要确定几个问题:
( 1 )函数名。应是见名知义,反映函数的功能,今定名为max。
( 2 )函数的类型。由于给定的两个数是整数,显然其中大者也是整数,也就是说max函数的值(即返回主调函数的值)应该是整型。
( 3 ) max函数的参数个数和类型。max函数应当有两个参数,以便从主函数接收两个整数,显然,参数的类型应当是整型。在调用max函数时,应当给出两个整数作为实参,传给max函数中的两个形参。
编写程序:
运行结果:
程序分析:
先定义max函数(注意第1行的末尾没有分号)。第1行定义了一个函数,名为max,函数类型为int。指定两个形参x和y,形参的类型为int。
主函数中包含了一个函数调用max ( a,b )。max后面括号内的a和b是实参。a和b是在main函数中定义的变量,x和y是函数max的形式参数。通过函数调用,在两个函数之间发生数据传递,实参a和b的值传递给形参x和y,在max函数中把x和y中的大者赋给变量z,z的值作为函数值返回main函数,赋给变量c。
说明:
( 1 )实参可以是常量、变量或表达式,例如:max ( 3,a + b ),但要求它们有确定的值。在调用时将实参的值赋给形参。
( 2 )实参与形参的类型应相同或赋值兼容。上例中实参和形参的类型相同,都是int型,这是合法的、正确的。如果实参为int型而形参x为float型,或者相反,则按不同类型数值的赋值规则进行转换。例如实参a为float型变量,其值为3.5,而形参x为int型,则在传递时先将实数3.5转换成整数3,然后送到形参x。字符型与int型可以互相通用。