C语言函数调用和参数传递
C语言函数被定义以后可以被多次调用,调用的时候可以向它传递参数。
在程序中使用已经定义的函数,可以使用函数调用表达式,其一般格式如下:
程序执行时,函数调用表达式将会被函数返回值所代替(见图 1)。函数的返回值一般由 return 语句指定。

图 1:函数调用时参数的传递(值传递)和值的返回
程序运行中进行函数调用后,程序的流程会转到被调用的函数处,同时传递过来的实参的值被赋值给函数对应的形参(形参初始化),接着执行函数体语句,在遇到 return 语句,或者执行到函数体最后的大括号时,程序流程就会从该函数跳转到原来调用函数的位置(见图 2)。

图 2:调用函数时程序的执行流程
代码清单 1:使用函数求两个整数中较大的值
运行结果为:
由于函数间参数的传递是通过值传递进行的,所以,函数调用表达式中的实参可以是另一个有返回值的函数调用表达式(见图 3)。

图 3:将函数的返回值作为参数传递给函数
指向数组的形参声明格式如下:

图 4:函数调用中数组和变量值的传递
代码清单 2:使用函数(数组的传递)计算数学成绩和英语成绩的最高分
运行结果为:
图 5 展示了函数调用中数组的传递和变量值传递的区别。

图 5:函数调用中数组的传递和变量值传递的区别
声明:《C语言系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。
C语言函数调用
函数的调用指的就是函数的使用方法。在程序中使用已经定义的函数,可以使用函数调用表达式,其一般格式如下:
函数名(实参1, 实参2, …) //实参对应于函数定义时的形参声明
程序执行时,函数调用表达式将会被函数返回值所代替(见图 1)。函数的返回值一般由 return 语句指定。

图 1:函数调用时参数的传递(值传递)和值的返回
程序运行中进行函数调用后,程序的流程会转到被调用的函数处,同时传递过来的实参的值被赋值给函数对应的形参(形参初始化),接着执行函数体语句,在遇到 return 语句,或者执行到函数体最后的大括号时,程序流程就会从该函数跳转到原来调用函数的位置(见图 2)。

图 2:调用函数时程序的执行流程
代码清单 1:使用函数求两个整数中较大的值
#include <stdio.h> #include <stdlib.h> /*---自定义函数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 <stdio.h> #include <stdlib.h> #define NUMBER 5 /*--自定义函数:返回拥有n个元素的数组v中的最大值--*/ int Max_of(int v[],int n) { int i,max=0; for(i=0;i<n;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<NUMBER;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:函数调用中数组的传递和变量值传递的区别
知识点总结
- 函数内接收数组的形参所指的数组就是原数组本身,只是数组名改变为形参的参数名而已(有别于一般变量参数值的传递)。
- 在函数内对形参数组的修改实际上就是对实参数组(原数组)的修改。
- 在函数内改变形参变量的值不会影响实参变量。
声明:《C语言系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。