我们先回顾一下函数的定义和调用语法格式,然后重点讲函数的形参与实参。
1 函数
C语言程序是由函数组成的,一个程序可以由多个函数组成。
C语言程序只能有一个主函数,即只能有一个main函数。
函数分为系统函数和用户自定义函数。
scanf( )和printf( )都是系统函数,scanf( )是输入函数,printf( )是输出函数,我们可以直接调用。
用户自定义函数就是我们自己定义的函数,函数的功能由我们自己编程实现。
以下所说的函数都指用户自定义函数。
C语言程序可以由多个函数组成,但只能有一个主函数,即只能有一个main( )函数。
不管程序由多少个函数组成,程序都是从main( )函数开始执行。
2 函数的4种类型
函数的定义语法格式:
数据类型 函数名( 形式参数表 )
{
函数体;
}
上述形式参数表是可选项,不是每个函数都有形式参数。
函数有4种类型:
类型1:无返回值无参数函数
void 函数名( ) { }
以下语句定义一个无返回值无参数函数,无返回值的函数类型是void,函数名自己命名,如命名为f1:
类型2:无返回值有参数函数
void 函数名(形式参数表) { }
以下语句定义一个无返回值有参数函数,参数就是形式参数,无返回值的函数类型是void,函数名自己命名,如命名为f2,只有一个参数,为int型,参数名为m:
类型3:有返回值无参数函数
数据类型 函数名( ) { }
如果函数有返回值,则函数体中必须要有一句:
return 值;
这个值的类型和函数的数据类型是一致的。
比如函数头为: int f3( )
则函数体内必定有一句:
return 整数;
以下语句定义一个有返回值无参数函数,函数类型为int,说明函数要返回一个整数,函数名自己命名,如命名为f3,没有参数。
一般有返回值无参数的函数比较少见,因为意义不大。常见的是第4类。
类型4:有返回值有参数函数
数据类型 函数名(形式参数表) { }
以下语句定义一个有返回值有参数的函数,函数类型为int,说明函数要返回一个整数,函数名自己命名,如命名为f4,有两个整型参数x和y。
3 函数的调用
定义了函数,目的就是为了在其它函数里调用,比如在主函数里调用自定义函数。
函数的调用语法格式:
函数名( );
或者:
函数名( 实际参数表 );
如果是第1、3类函数,无返回值无参数或有返回值无参数,则调用时也没有对应的参数。
但如果是第2、4类函数,无返回值有参数或有返回值有参数,则调用时需要给出对应的参数。
程序1:
运行结果就是第1行输出三个*号,第2行输出三个#号,第3行输出三个*号:
程序2:
函数f3的类型是int,表示这个函数有一个返回值,而且返回值是int型(返回一个整数)。
也就是说,函数f3里面必须有一个语句形如:
return 整数;
函数f3的形参两个:a和b,都是int型。
主函数里可以调用函数f3,而且可以多次调用。
调用时实参要与形参一一对应。
比如调用语句为f3(10,20)时,实参为10、20;
当调用语句为f3(100,200)时,实参为100、200。
函数f3的功能是什么?
就是将两个整数相加,返回它们的和。
程序2的运行结果为:
形参只能是变量,但实参可以是常数,也可以是变量。
4 形参与实参
函数定义时的参数叫形式参数(简称形参),调用时的参数叫实际参数(简称实参)。
形参相当于电影剧本里面的角色,实参相当于扮演这个角色的演员。
一个角色可以由多个演员扮演,比如角色叫杨过,这个剧本可以翻拍多次,就会有多个不同演员来扮演杨过,如刘德华、古天乐、黄晓明等。
程序3:
程序3中函数f3的形参为两个int变量:a和b, 实参为两个int变量n和m。
当运行时输入100 200,则n=100,m=200。
调用函数f3(n,m),则将100传给形参a,200传给形参b,f3的返回结果是a+b即100+200,也就是说函数f3以300的结果返回主函数,则x=f3(n,m)的结果就是x=300。
最后输出300。
程序3运行结果:
5 形参的改变不能影响实参
前面提过,当调用函数时,实参的值传给形参,形参的改变不会影响对应的实参。
就相当于剧本里的角色杨过断臂了,但扮演这个角色的演员并没有断臂。
角色不会影响演员,当演员把值传给角色后,不管角色怎么变,电影拍摄完毕,演员该干嘛就干嘛,没有任何影响。
程序4:
程序4中函数f4的形参为两个int变量:a和b, 实参为两个int变量x和y。
一开始x=1,y=2,输出1和2。
然后调用函数f4(x,y),将实参x的值1和实参y的值2传给形参a和b。
函数f4中将形参a的值变为100,形参b的值变为200,输出a和b的值100和200。
然后形参的改变不影响实参,回到主函数中再输出x和y,依然是1和2。
程序4运行结果:
6 总结
1. C语言程序可以由多个函数组成,但只能有一个主函数(main函数)。程序总是从main( )函数开始执行。
2. 函数的4种类型:
(1)无返回值无参数函数;
(2)无返回值有参数函数;
(3)有返回值无参数函数;
(4)有返回值有参数函数。
3. 函数定义时的参数叫形式参数(简称形参),调用时的参数叫实际参数(简称实参)。
4. 形参只能是变量,但实参可以是常数,也可以是变量。
5. 当调用函数时,实参的值传给形参。形参的改变不会影响对应的实参。