对于函数的位置: 对于非int函数,调用单位的位置要在被调用单位在下面, 否则编译产生错误。 解决方法是:在调用单位加上被调用函数的声(说)明 void fO main() mal dvoid f(; fO; f mal n() void f() void f() f();
对于函数的位置: 对于非int函数,调用单位的位置要在被调用单位在下面, 否则编译产生错误。 解决方法是:在调用单位加上被调用函数的声(说)明。 void f() { … } main( ) { … f ( ); … } void f( ) { … } main( ) { … f (); … } void f( ) { … } main( ) {void f( ); … f (); … }
5.2.2函数说明 今对被调用函数要求 必须是已存在的函数 库函数:# include<*h> 用户自定义函数:函数类型说明 今函数说明 ●一般形式:函数类型函数名(形参类型[形参名],…) 或 函数类型函数名 作用:告诉编译系统函数类型、参数个数及类型,以便检验 函数定义与函数说明不同; 函数说明位置:程序的数据说明部分(函数内或外); ●下列情况下,可不作函数说明 ◆若函数返值是char或int型,系统自动按int型处理 ◆被调用函数定义出现在主调函数之前 有些系统(如 Borland o++要求函数说明指出函数返值类型和形 参类型,并且对vo和int型函数也要进行函数说明
5.2.2 函数说明 ❖对被调用函数要求: ⚫必须是已存在的函数 ⚫库函数: #include <*.h> ⚫用户自定义函数: 函数类型说明 ❖函数说明 ⚫一般形式: 函数类型 函数名(形参类型 [形参名],….. ); 或 函数类型 函数名(); ⚫作用:告诉编译系统函数类型、参数个数及类型,以便检验; ⚫函数定义与函数说明不同; ⚫函数说明位置:程序的数据说明部分(函数内或外); ⚫下列情况下,可不作函数说明 ◆若函数返值是char或int型,系统自动按int型处理; ◆被调用函数定义出现在主调函数之前; ⚫有些系统(如Borland C++)要求函数说明指出函数返值类型和形 参类型,并且对void 和 int 型函数也要进行函数说明
例函数说明举例 maino i float add (float, float);/*function declaration*/ fle b oat a.b.c float addO scanf("%f, %f, &a, &b) add(a, b) 主调函数 printf("sum is %f, c) 数说明 float add(float x, float y i float z=X+y return(z)
例 函数说明举例 main() { float a,b; int c; scanf("%f,%f",&a,&b); c=max(a,b); printf("Max is %d\n",c); } max(float x, float y) { float z; z=x>y?x:y; return(z); } int型函数可不作函数说明 (Borland C++不行) /*ch7_5.c*/ float add(float x, float y) { float z; z=x+y; return(z); } main() { float a,b,c; scanf("%f,%f",&a,&b); c=add(a,b); printf("sum is %f",c); } 被调函数出现在主调函数 之前,不必函数说明 /* */ main() { float add(float,float); /*function declaration*/ float a,b,c; scanf("%f,%f",&a,&b); c=add(a,b); printf("sum is %f",c); } float add(float x, float y) { float z; z=x+y; return(z); } float add();
例4.44.5
例4.4 4.5
852.3函数参数及其传递方式 ★形参与实参 今形式参数:定义函数时函数名后面括号中的变量名 今实际参数:调用函数时函数名后面括号中的表达式 ★C语言中,函数调用是值传递方式,即函数的实际参数和 形式参数之间的数据传递方向是单向的,只能由实际参 数传递给形式参数,而不能由形式参数传递给实际参数, 是实际参数向形式参数单向赋值的关系 ★在内存中,形式参数与实际参数占用不同的内存单元。 当调用函数时,给形式参数分配内存单元,将实际参数 的值赋值给形式参数,调用后,形式参数单元释放,实 际参数仍保留调用前的值,形式参数值的变化不影响实 际参数
C语言中,函数调用是值传递方式,即函数的实际参数和 形式参数之间的数据传递方向是单向的,只能由实际参 数传递给形式参数,而不能由形式参数传递给实际参数, 是实际参数向形式参数单向赋值的关系。 在内存中,形式参数与实际参数占用不同的内存单元。 当调用函数时,给形式参数分配内存单元,将实际参数 的值赋值给形式参数,调用后,形式参数单元释放,实 际参数仍保留调用前的值,形式参数值的变化不影响实 际参数。 §5.2.3 函数参数及其传递方式 形参与实参 ❖形式参数:定义函数时函数名后面括号中的变量名 ❖实际参数:调用函数时函数名后面括号中的表达式