靳润昭C语言教程讲义 2001年2月17日 int max (int a, int b) f(a>b)return a else return b main int max(int a, int b) int printf( input two numbers: \n") scanf(%d%d",&x, &y) printf("maxmum=%d", z) 现在我们可以从函数定义、函数说明及函数调用的角度来分析整个程序,从中进一步了 解函数的各种特点。 程序的第1行至第5行为max函数定义。进入主函数后,因为准备调用max函数,故先 对max函数进行说明(程序第8行)。函数定义和函数说明并不是一回事,在后面还要专门讨 论。可以看出函数说明与函数定义中的函数头部分相同,但是末尾要加分号。程序第12行 为调用max函数,并把x,y中的值传送给max的形参a,b。max函数执行的结果(a或b) 将返回给变量z。最后由主函数输出z的值 83函数的参数和函数的值 83.1形式参数和实际参数 前面已经介绍过,函数的参数分为形参和实参两种。在本小节中,进一步介绍形参、实 参的特点和两者的关系。形参出现在函数定义中,在整个函数体内都可以使用,离开该函数 则不能使用。实参出现在主调函数中,进入被调函数后,实参变量也不能使用。形参和实参 的功能是作数据传送。发生函数调用时,主调函数把实参的值传送给被调函数的形参从而实 现主调函数向被调函数的数据传送。 函数的形参和实参具有以下特点: 1.形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元 因此,形参只有在函数内部有效。函数调用结束返回主调函数后则不能再使用该形参变 量 2.实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用 时,它们都必须具有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等 办法使实参获得确定值。 3.实参和形参在数量上,类型上,顺序上应严格一致,否则会发生类型不匹配”的错误。 4.函数调用中发生的数据传送是单向的。即只能把实参的值传送给形参,而不能把形参的 值反向地传送给实参。因此在函数调用过程中,形参的值发生改变,而实参中的值不 第4页靳润昭 C 语言教程讲义 2001 年 2 月 17 日 第4页 int max(int a,int b) { if(a>b)return a; else return b; } main() { int max(int a,int b); int x,y,z; printf("input two numbers:\n"); scanf("%d%d",&x,&y); z=max(x,y); printf("maxmum=%d",z); } 现在我们可以从函数定义、函数说明及函数调用的角度来分析整个程序,从中进一步了 解函数的各种特点。 程序的第 1 行至第 5 行为 max 函数定义。进入主函数后,因为准备调用 max 函数,故先 对 max 函数进行说明(程序第 8 行)。函数定义和函数说明并不是一回事,在后面还要专门讨 论。 可以看出函数说明与函数定义中的函数头部分相同,但是末尾要加分号。程序第 12 行 为调用 max 函数,并把 x, y 中的值传送给 max 的形参 a, b。max 函数执行的结果(a 或 b) 将返回给变量 z。最后由主函数输出 z 的值。 8.3 函数的参数和函数的值 8.3.1 形式参数和实际参数 前面已经介绍过,函数的参数分为形参和实参两种。在本小节中,进一步介绍形参、实 参的特点和两者的关系。形参出现在函数定义中,在整个函数体内都可以使用,离开该函数 则不能使用。实参出现在主调函数中,进入被调函数后,实参变量也不能使用。形参和实参 的功能是作数据传送。发生函数调用时,主调函数把实参的值传送给被调函数的形参从而实 现主调函数向被调函数的数据传送。 函数的形参和实参具有以下特点: 1. 形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。 因此,形参只有在函数内部有效。函数调用结束返回主调函数后则不能再使用该形参变 量。 2. 实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用 时,它们都必须具有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等 办法使实参获得确定值。 3. 实参和形参在数量上,类型上,顺序上应严格一致,否则会发生类型不匹配”的错误。 4. 函数调用中发生的数据传送是单向的。即只能把实参的值传送给形参,而不能把形参的 值反向地传送给实参。 因此在函数调用过程中,形参的值发生改变,而实参中的值不