弗原創IT教育中心 说明 (1)调用函数时,函数名称必须与具有该功能的自 定义函数名称完全一致 (2)实参在类型上按顺序与形参,必须一一对应和 匹配。如果类型不匹配,C编译程序将按赋值兼容的规则 进行转换。如果实参和形参的类型不赋值兼容,通常并 不给出出错信息,且程序仍然继续执行,只是得不到正 确的结果。 (3)如果实参表中包括多个参数,对实参的求值顺 序随系统而异。有的系统按自左向右顺序求实参的值, 有的系统则相反。 Turbo c和MSC是按自右向左的顺序进 行的
说明: (1)调用函数时,函数名称必须与具有该功能的自 定义函数名称完全一致。 (2)实参在类型上按顺序与形参,必须一一对应和 匹配。如果类型不匹配,C编译程序将按赋值兼容的规则 进行转换。如果实参和形参的类型不赋值兼容,通常并 不给出出错信息,且程序仍然继续执行,只是得不到正 确的结果。 (3)如果实参表中包括多个参数,对实参的求值顺 序随系统而异。有的系统按自左向右顺序求实参的值, 有的系统则相反。Turbo C和MS C是按自右向左的顺序进 行的
弗原創IT教育中心 215函数的形参与实参 函数的参数分为形参和实参两种,作用是实 现数据传送。 形参出现在函数定义中,只能在该函数体内 使用。发生函数调用时,调用函数把实参的值复 制1份,传送给被调用函数的形参,从而实现调 用函数向被调用函数的数据传送。 [案例23实参对形参的数据传递。 /米*实参对形参的数据传递。米/
2.1.5 函数的形参与实参 函数的形参与实参 函数的参数分为 函数的参数分为形参和实参两种,作用是实 两种,作用是实 现数据传送。 形参出现在函数定义中,只能在该函数体内 形参出现在函数定义中,只能在该函数体内 使用。发生函数调用时,调用函数把实参的值复 使用。发生函数调用时,调用函数把实参的值复 制1份,传送给被调用函数的形参,从而实现调 份,传送给被调用函数的形参,从而实现调 用函数向被调用函数的数据传送。 用函数向被调用函数的数据传送。 [案例2.3] 实参对形参的数据传递。 实参对形参的数据传递。 /*实参对形参的数据传递。 实参对形参的数据传递。*/
弗原創IT教育中心 void maino i void s(int n) /*说明函数*/ int n=100 /*定义实参n,并初始化*/ s(n) /*调用函数*/ printf("n %/od\n", n) retch void s(int n) int1° printi("nx=%d\n",n);/*输出改变前形参的值*/ for(i=n-1;>=1i-)n=n+i;/*改变形参的值* printi("nx=%dn"n);/*输出改变后形参的值*/ 程序运行(2)
void main() void main() { void { void s(int n); /* n); /*说明函数*/ int n=100; /* n=100; /*定义实参n,并初始化*/ s(n); /* s(n); /*调用函数*/ printf("n_s printf("n_s=%d\n",n); getch(); } void s(int n) { int i; printf("n_x printf("n_x=%d\n",n); /* n",n); /*输出改变前形参的值 输出改变前形参的值*/ for(i=n for(i=n-1; i>=1; i 1; i>=1; i--) n=n+i; /* ) n=n+i; /*改变形参的值*/ printf("n_x printf("n_x=%d\n",n); /* n",n); /*输出改变后形参的值 输出改变后形参的值*/ } } 程序运行(2)
弗原創IT教育中心 说明: (1)实参可以是常量、变量、表达式、函数等。无 论实参是何种类型的量,在进行函数调用时,它们都必 须具有确定的值,以便把这些值传送给形参。 因此,应预先用赋值、输入等办法,使实参获得确 定的值。 (2)形参变量只有在被调用时,才分配内存单元; 调用结束时,即刻释放所分配的内存单元。 (3)实参对形参的数据传送是单向的,即只能把实 参的值传送给形参,而不能把形参的值反向地传送给实 参 (4)实参和形参占用不同的内存单元,即使同名也 互不影响
说明: (1)实参可以是常量、变量、表达式、函数等。无 )实参可以是常量、变量、表达式、函数等。无 论实参是何种类型的量,在进行函数调用时,它们都必 ,在进行函数调用时,它们都必 须具有确定的值,以便把这些值传送给形参。 须具有确定的值,以便把这些值传送给形参。 因此,应预先用赋值、输入等办法,使实参获得确 ,应预先用赋值、输入等办法,使实参获得确 定的值。 (2)形参变量只有在被调用时,才 )形参变量只有在被调用时,才分配内存单元; 调用结束时,即刻释放所分配的内存单元。 调用结束时,即刻释放所分配的内存单元。 (3)实参对形参的数据传送是单向 )实参对形参的数据传送是单向的,即只能把实 参的值传送给形参,而不能把形参的值反向地传送给实 不能把形参的值反向地传送给实 参。 (4)实参和形参占用不同的内存单 )实参和形参占用不同的内存单元,即使同名也 互不影响
弗原創IT教育中心 22函数的嵌套和递归调用 221函数的嵌套调用 函数的嵌套调用是指,在执行被调用函数时,被调 用函数又调用了其它函数。这与其它语言的子程序嵌套 调用的情形是类似的,其关系可表示如图21。 main(函数 f10函数 f20函数 调用f1(函数; 调用f20函数; 后续语句; 后续语句 结東 返回 返回
2.2 函数的嵌套和递归调用 函数的嵌套和递归调用 2.2.1 函数的嵌套调用 函数的嵌套调用 函数的嵌套调用是指,在执行被调用函数时,被调 的嵌套调用是指,在执行被调用函数时,被调 用函数又调用了其它函数。这与其它语言的子程序嵌套 数。这与其它语言的子程序嵌套 调用的情形是类似的,其关系可表示如图 调用的情形是类似的,其关系可表示如图2-1