75函数参数的传递方式 751函数的实参与形参 ●形式参数:定义函数时函数名后面括号中的变量名 ●实际参数:调用函数时函数名后面括号中的变量或表达式 说明 maino 实参与形参个数{ int ab;c 对应 若形参与实参类 scanf("%d,%d",&a&b);转换一 函数调用转c=max(ab); 实参 形参在函数被调 printf(" Max is%d"c);内形参分 配内存;调用结} 实参表求值顺序 max(int x,inty) 形参)
⚫说明: 实参与形参个数相等,类型一致,按顺序一一对应 若形参与实参类型不一致,自动按形参类型转换— ——函数调用转换 形参在函数被调用前不占内存;函数调用时为形参分 配内存;调用结束,内存释放 实参表求值顺序,因系统而定(Turbo C 自右向左) ⚫形式参数:定义函数时函数名后面括号中的变量名 ⚫实际参数:调用函数时函数名后面括号中的变量或表达式 7.5 函数参数的传递方式 7.5.1 函数的实参与形参 main() { int a,b,c; scanf("%d,%d",&a,&b); c=max(a,b); printf("Max is %d",c); } max(int x, int y) {…} 形参 实参
7.52按值传递 例1比较两个数并输出大者 main f int a, b, c scanf("%od, %od", &a, &b) cmax(mi函数)c=max(a.b) 实参 max(intx, int y)(max函数) printf(" Max is%d"c); Int z z=xy? y max(int x, int y) return (z) 形参 int zxy?X:y return(z)
7.5.2 按值传递 c=max(a,b); (main 函数) max(int x, int y)(max 函数) { int z; z=x>y?x:y; return(z); } 例1 比较两个数并输出大者 main() { int a,b,c; scanf("%d,%d",&a,&b); c=max(a,b); printf("Max is %d",c); } max(int x, int y) { int z; z=x>y?x:y; return(z); } 形参 实参
例2交换两个数 ch7 2.c*/ #include <stdio.h> 调用前 maint i int x7,y=1l X:7 printf("x%d, ty=%dn",x,y) 调用: printf("swapped: n") swap(xy) printf("x%od, ty=%dn",x y) Swap swap(int a, int b) i int temp mp temp=a; a=b; b=temp 调用结束
调用前: x: 7 y: 11 调用结束: x: 7 y: 11 /*ch7_2.c*/ #include <stdio.h> main() { int x=7,y=11; printf("x=%d, \ty=%d \n",x,y); printf("swapped: \n"); swap(x,y); printf("x=%d, \ty=%d \n",x,y); } swap(int a,int b ) { int temp; temp=a; a=b; b=temp; } 调用: a: 7 b: 11 x: 7 y: 11 swap: x: 7 y: 11 a: 11 b: 7 temp 例2 交换两个数
753函数的地址传递 方式:函数调用时,将数据的存储地 址作为参数传递给形参 特点: 形参与实参占用同样的存储单元 》“双向”传递 实参和形参必须是地址常量或变量
–方式:函数调用时,将数据的存储地 址作为参数传递给形参 –特点: »形参与实参占用同样的存储单元 »“双向”传递 »实参和形参必须是地址常量或变量 7.5.3 函数的地址传递
/+ch93c*例交换两个数|例子图解 swap(p1, p2 int *p1, *p2; d int p p1 1=*p2 &a *D2=Pi 调 Swap &b maino dint a, b: scanf (%d, %d",&a, &b) &a printf=%db=%dn"ab)交换 printf(swapped:Ⅶn") 2 swap &a, &b) &b printf (a=%d, b=%odn", a, b; 返回:
/*ch9_3.c*/ swap(p1,p2) int *p1,*p2; { int p; p=*p1; *p1=*p2; *p2=p; } main() {int a,b; scanf("%d,%d",&a,&b); printf(“a=%d,b=%d \n”,a,b); printf(“swapped: \n”); swap(&a,&b); printf(”a=%d,b=%d \n",a,b); } 例 交换两个数 a5 9b 调前: a59b 调swap: p1 &a &b p2 a95b 交换: p1 &a &b p2a9 5b 返回: 例子图解