1.函数调用
创建C函数时,会定义函数做什么,然后通过调用函数来完成已定义的任务。每当我们调用函数时,它都会执行为其设计的操作。 函数调用是程序中的可选部分。
当程序调用函数时,程序控制权会转移给被调用的函数。被调用的函数执行已定义的任务,当函数的返回语句被执行时,或到达函数的结束括号时,会把程序控制权交还给主程序。调用函数时,传递所需参数,如果函数返回一个值,则可以存储返回值。
例1.加法函数的调用
#include <stdio.h>
int add(int a, int b); //function declaration
int main()
{
int a=10,b=20;
int c=add(10,20); //function call
printf("Addition:%d\n",c);
return 0;
}
int add(int a,int b) //function body
{
int c;
c=a+b;
return c;
}
函数的参数用来通过函数调用接收必要的值。 它们按位置匹配: 第一个参数传递给第一个参数,第二个参数传递给第二个参数,依此类推。
默认情况下,参数按值传递,在该值中将数据副本提供给被调用函数。 实际传递的变量不会更改。
实参(argument):
全称为”实际参数”是在调用时传递给函数的参数. 实参可以是常量、变量、表达式、函数等, 无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值, 以便把这些值传送给形参。 因此应预先用赋值,输入等办法使实参获得确定值。
形参(parameter):
全称为”形式参数” 由于它不是实际存在变量,所以又称虚拟变量。是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数.在调用函数时,实参将赋值给形参。因而,必须注意实参的个数,类型应与形参一一对应,并且实参必须要有确定的值
形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只有在函数内部有效。函数调用结束返回主调函数后则不能再使用该形参变量。
一般情况下,我们称传递的是参数。
2.函数的返回值
函数的值是指函数被调用之后,执行函数体中的程序段所取得的并返回给主调函数的值。如调用正弦函数取得正弦值。
对函数的值(或称函数返回值)有以下一些说明:
1) 函数的值只能通过 return 语句返回主调函数。 return 语句的一般形式为:
return 表达式;
或者为:
return (表达式);
该语句的功能是计算表达式的值,并返回给主调函数。在函数中允许有多个 return语句,但每次调用只能有一个 return 语句被执行,因此只能返回一个函数值。
2) 函数值的类型和函数定义中函数的类型应保持一致。如果两者不一致,则以函数类型为准,自动进行类型转换。
3) 如函数值为整型,在函数定义时可以省去类型说明。
4) 不返回函数值的函数,可以明确定义为“空类型”,类型说明符为“void”。
下例函数 s 并不向主函数返函数值,因此可定义为:
void s(int n)
{
……
}
一旦函数被定义为空类型后,就不能在主调函数中使用被调函数的函数值了。
例如,在定义 s 为空类型后,在主函数中写下述语句
sum=s(n);
就是错误的。
为了使程序有良好的可读性并减少出错, 凡不要求返回值的函数都应定义为空类型
3.函数调用的方式
在C语言中,可以用以下几种方式调用函数:
1. 函数表达式:函数作为表达式中的一项出现在表达式中,以函数返回值参与表达式的运算。这种方式要求函数是有返回值的。例如:z=max(x,y)是一个赋值表达式,把 max的返回值赋予变量 z。
2. 函数语句:函数调用的一般形式加上分号即构成函数语句。例如: printf (“%d”,a); scanf (“%d”,&b);都是以函数语句的方式调用函数。
3. 函数实参:函数作为另一个函数调用的实际参数出现。这种情况是把该函数的返回值作为实参进行传送 , 因此要求该函数必须是有返回值的 。
例 如 : printf(“%d”,max(x,y)); 即是把 max 调用的返回值又作为 printf 函数的实参来使用的。
4.举例说明函数调用
例4.1 加法函数的调用
#include <stdio.h>
int add (int x, int y);
int main()
{
int a, b, result;
a = 5;
b = 10;
result = add(a, b);
printf("%d + %d\ = %d\n", a, b, result);
return 0;
}
int add (int x, int y)
{
x += y;
return(x);
}
请记住,传递给add函数的a和b的值不会更改,因为仅将其值传递给了参数x,y。
x+=y (+= 是操作符,也叫运算符。相当于 x=x+y)