C语言函数被定义以后可以被多次调用,调用的时候可以向它传递参数。
C语言函数调用
函数的调用指的就是函数的使用方法。
在程序中使用已经定义的函数,可以使用函数调用表达式,其一般格式如下:
函数名(实参1, 实参2, …) //实参对应于函数定义时的形参声明
程序执行时,函数调用表达式将会被函数返回值所代替(见图 1)。函数的返回值一般由 return 语句指定。
图 1:函数调用时参数的传递(值传递)和值的返回
程序运行中进行函数调用后,程序的流程会转到被调用的函数处,同时传递过来的实参的值被赋值给函数对应的形参(形参初始化),接着执行函数体语句,在遇到 return 语句,或者执行到函数体最后的大括号时,程序流程就会从该函数跳转到原来调用函数的位置(见图 2)。
图 2:调用函数时程序的执行流程
代码清单 1:使用函数求两个整数中较大的值
#include
#include
/*---自定义函数Max2:返回较大值---*/
int Max2 (int a, int b)
{
if(a>b)
return a;
else
return b;
}
/*---主函数---*/
int main( )
{
int n1,n2;
puts("请输入两个整数。\n");
printf("整数1:"); scanf("%d",&n1);
printf("整数2:"); scanf("%d",&n2);
printf("较大的值是%d \n",Max2(n1,n2)); //调用Max2函数
system("pause");
return 0;
}
运行结果为:
请输入两个整数。
整数1:66
整数2:47
较大的值是66
知识点总结
函数调用的形式是在函数名后面加上小括号“()”。
函数调用时,小括号“()”中的参数称为“实参”。
函数调用的形式可称为“函数的调用表达式”。
函数调用表达式的值就是函数的返回值。
函数调用时参数的传递:值传递
上面的代码清单 1 中,main( ) 函数通过 Max2(n1,n2) 调用自定义函数 Max2 时,实参变量 n1 的值被赋值给 Max2 的形参变量 a,实参变量 n2 的值被赋值给 Max2 的形参变量 b,此时,a 是 n1 的副本,两者具有相同的值,b 是 n2 的副本,两者具有相同的值。像这样通过值来进行参数传递的机制称为值传递。
由于函数间参数的传递是通过值传递进行的,所以,函数调用表达式中的实参可以是另一个有返回值的函数调用表达式(见图 3)。
图 3:将函数的返回值作为参数传递给函数
知识点总结
函数间参数的传递是通过值的传递进行的。
函数调用时实参的值会被赋给形参。
形参所指的变量是对应的实参所指的变量的副本,它们具有相同的值。
3. 函数调用时数组的传递
自定义函数中,如果形参接收的是一个数组,则定义函数时要在形参声明中加上[ ]。而在函数调用表达式中的实参则直接使用数组名即可(见图 4)。
指向数组的形参声明格式如下:
类型名 形参名[ ] //形参名与指向的原数组名不同
//类型名与数组的数据类型相同
图 4:函数调用中数组和变量值的传递
代码清单 2:使用函数(数组的传递)计算数学成绩和英语成绩的最高分
#include
#include
#define NUMBER 5
/*--自定义函数:返回拥有n个元素的数组v中的最大值--*/
int Max_of(int v[],int n)
{
int i,max=0;
for(i=0;i
if(v[i]>max) max=v[i];
return max;
}
/*---主函数---*/
int main()
{
system("color 70");
int i,eng[NUMBER],math[NUMBER],max_e,max_m;
printf("请输入%d名学生的成绩。\n",NUMBER);
for(i=0;i
printf("[%d]英语:",i+1); scanf("%d",&eng[i]);
printf(" 数学:"); scanf("%d",&math[i]);
}
max_e=Max_of(eng,NUMBER); //调用Max_of函数
max_m=Max_of(math,NUMBER); //调用Max_of函数
printf("英语最高分=%d\n",max_e);
printf("数学最高分=%d\n",max_m);
system("pause");
return 0;
}
运行结果为:
请输入5名学生的成绩。
[1]英语:89
数学:78
[2]英语:77
数学:88
[3]英语:79
数学:83
[4]英语:71
数学:87
[5]英语:70
数学:96
英语最高分=89
数学最高分=96
图 5 展示了函数调用中数组的传递和变量值传递的区别。
图 5:函数调用中数组的传递和变量值传递的区别
知识点总结
函数内接收数组的形参所指的数组就是原数组本身,只是数组名改变为形参的参数名而已(有别于一般变量参数值的传递)。
在函数内对形参数组的修改实际上就是对实参数组(原数组)的修改。
在函数内改变形参变量的值不会影响实参变量。