
第10章函数的进 一步讨论 本章介绍函数与指针的结合以及函数的递归调 用
第10章 函数的进一步讨论 本章介绍函数与指针的结合以及函数的递归调 用

指针作函数参数 指针可用作函数的形参和实参
指针作函数参数 指针可用作函数的形参和实参

【例10.1】编程序,在被调函数中将主调函数中两个 局部变量的值相交换。 #include "stdio.h" mainO void swap(int m,int n) int a,b; int temp; a=3; b=5; temp=m; swap(a,b); m=n; n=temp; printf("m=%d,m-pmd,b= return;} %d小n",a,b);
#include "stdio.h" void swap(int m,int n) { int temp; temp=m; m=n; n=temp; printf("m=%d,m=%d\n",m,n); return;} main() { int a,b; a=3; b=5; swap(a,b); printf("a=%d,b= %d\n",a,b); } 【例10.1】 编程序,在被调函数中将主调函数中两个 局部变量的值相交换

例在被调函数中,交换主调函数中两个 变量的值。 #include void swap() int t; main() t=a; fint a,b; a=b; a=5; b=t; b=3; return;} swap(); printf("a=%d,b=%d n",a,b)}
#include void swap( ) { int t; t=a; a=b; b=t; return;} main( ) {int a,b; a=5; b=3; swap( ); printf("a=%d,b=%d \n",a,b);} 例 在被调函数中,交换主调函数中两个 变量的值

main() #include { void swap() int a,b; { a=5; int t,*p,*q; b=3; p=&a; swapO; q=&b; printf"'a=%d,b=%d小n",a,b); t=*p; *p=*q; *q=t街 return;
#include void swap( ) { int t,*p,*q; p=&a; q=&b; t=*p; *p=*q; *q=t; return; } main( ) { int a,b; a=5; b=3; swap(); printf("a=%d,b=%d\n",a,b); }

main( #include fint a,b; void swap(int *p1,int *p2) a=5; int t; b=3; t=*p1; *p1=*p2; swap(&a,&b); *p2=t; printf("a=%d,b=%d n",a,b)} return;
#include void swap(int *p1,int *p2) { int t; t=*p1; *p1=*p2; *p2=t; return; } main( ) {int a,b; a=5; b=3; swap(&a,&b); printf("a=%d,b=%d \n",a,b);}

通过指针形参传递数据的一般步骤: (1)根据主调函数中待引用变量的数量和类型,在 被调函数中定义相应的指针形参。 (2)在主调函数中以待引用变量的地址作为对应的 实参。 (3)在被调函数中通过指针形参间接引用主调函数 中的对应变量
通过指针形参传递数据的一般步骤: (1)根据主调函数中待引用变量的数量和类型,在 被调函数中定义相应的指针形参。 (2)在主调函数中以待引用变量的地址作为对应的 实参。 (3)在被调函数中通过指针形参间接引用主调函数 中的对应变量

【例10.2】编写求三个数中最大数和最小数的函数, 要求不能用returni语句或全局变量将求得的最大数 和最小数传回到主调函数中
【例10.2】 编写求三个数中最大数和最小数的函数, 要求不能用return语句或全局变量将求得的最大数 和最小数传回到主调函数中

问题分析: 由于限定不能用return语句或全局变量将求得 的最大值和最小值传回到主调函数中,因此可以通 过指针形参间接引用的方式,将最大值和最小值赋 给主调函数中的变量
问题分析: 由于限定不能用return语句或全局变量将求得 的最大值和最小值传回到主调函数中,因此可以通 过指针形参间接引用的方式,将最大值和最小值赋 给主调函数中的变量

mainO #include void max min(int a,int b,int c,inin: int m,n; if(a>b) printf("请输入三个整数:"); im=a; scanf ("%d%d%d",&x,&y,&z); n=b;} max_min(x,y,z,&max,&min); else printf("最大数=%d,最小数 {m=b; =%d\n",max,min); n=a;} if(c>m) m=c; if(c<n) n=c; 米p=m; /*间接引用变量max*/ *q=n;/*间接引用变量min*/
#include void max_min(int a,int b,int c,int *p,int *q) { int m,n; if(a>b) {m=a; n=b;} else {m=b; n=a;} if(c>m) m=c; if(c<n) n=c; *p=m; /*间接引用变量max*/ *q=n; /*间接引用变量min*/ } main() { int x,y,z,max,min; printf("请输入三个整数:"); scanf("%d%d%d",&x,&y,&z); max_min(x,y,z,&max,&min); printf("最大数=%d,最小数 =%d\n",max,min); }