2.7.2 函数的调用
主调函数使用被调函数的功能,称为函数调用。在C语言中,只有在函数调用时,函数体中定义的功能才会被执行。C语言中,函数调用的一般形式为:
- 函数名(类型 形参,类型 形参…);
对无参函数调用时则无实际参数表。实际参数表中的参数可以是常数、变量或其他构造类型数据及表达式,各实参之间用逗号分隔。
在C语言中,可以用以下几种方式调用函数。
(1)函数表达式:函数作为表达式中的一项出现在表达式中,以函数返回值参与表达式的运算。这种方式要求函数是有返回值的。例如:
- z=max(x,y);
是一个赋值表达式,把max的返回值赋予变量z。
(2)函数语句:函数调用的一般形式加上分号即构成函数语句。例如:
- printf ("%d",a);
- scanf ("%d",&b);
都是以函数语句的方式调用函数。
(3)函数实参:函数作为另一个函数调用的实际参数出现。这种情况是把该函数的返回值作为实参进行传送,因此要求该函数必须是有返回值的。例如:
- printf("%d",max(x,y)); /*把max调用的
返回值作为printf函数的实参*/
在主调函数中调用某函数之前应对该被调函数进行声明。在主调函数中对被调函数进行说明的目的是使编译系统知道被调函数返回值的类型,以便在主调函数中按此种类型对返回值进行相应的处理。其一般形式为:
类型说明符 被调函数名(类型 形参,类型 形参…);
需要注意的是,函数的声明和函数的定义有本质上的不同。主要区别在以下两个方面:
(1)函数的定义是编写一段程序,应有函数的具体功能语句——函数体;而函数的声明仅是向编译系统的一个说明,不含具体的执行动作。
(2)在程序中,函数的定义只能有一次,而函数的声明可以有多次。
通过程序2.12中的代码,读者可以简单了解函数定义、说明、调用的全过程。
【程序2.12】编写一个max 函数,实现选取两个数中较大值的功能:test12.c。
- #include <stdio.h>
- int max(int a, int b); /*函数max的说明*/
- main()
- {
- int a, b;
- printf("Enter a b:");
- scanf("%d %d",&a, &b);
- printf("max = %d\n", max(a,b)); /*函数max的调用*/
- }
- int max(int a, int b) /*函数max的定义*/
- {
- int p;
- p=a>b a:b;
- return (p);
- }
程序运行结果如下(↙表示回车,□表示空格):
- Enter a b:100□99↙
- max=100
可以看到,程序中对两个输入整数的比较,调用了max()函数。
注意
在下列情况下可以省去主调函数中对被调函数的函数说明。
(1)如果被调函数的返回值是整型或字符型时,可以不对被调函数进行说明,而直接调用。这时系统将自动对被调函数返回值按整型处理。
(2)当被调函数的函数定义出现在主调函数之前时,在主调函数中也可以不对被调函数再进行说明而直接调用。
(3)如在所有函数定义之前,在函数外预先说明了各个函数的类型,则在以后的各主调函数中,可不再对被调函数进行说明。
(4)对库函数的调用不需要再进行说明,但必须把该函数的头文件用include 命令包含在源文件前部。