
第10章函数进一步讨论2025年4月4日
2025年4月4日 第 10 章 函数进一步 讨论

第10章函数2目录指针作为函数参数2数组名作为函数参数
第10章 函数2 目 录 指针作为函数参数 1 2 数组名作为函数参数

第10章函数2指针作为函数参数指针可用作函数的形参和实参。将指针变量作为函数的形参一地址传递
第10章 函数2 指针作为函数参数 1 指针可用作函数的形参和实参。 将指针变量作为函数的形参—地址传递

第10章函数2参数swap(int *pl, int *p2)int temp;交换了temp=*pl;指针变量所指变量*p1=*p2;的值*p2=temp;printf("In%d,% d\n",*p1,*p2)mainO运行结果:inta,b;9.int *pa,*pb;a=5; b=9;9-pa=&a; pb=&b;swap(pa,pb);地址传递printf("\n%d,%d\n",a,b);printf("In%d,%d\n",*pa,*pb)
第10章 函数2 指针作为函数参数 1 swap(int *p1, int *p2) { int temp; temp=*p1; *p1=*p2; *p2=temp; printf(“\n%d,%d\n”,*p1,*p2) } main() { int a,b; int *pa,*pb; a=5; b =9; pa=&a; pb=&b; swap(pa,pb); printf("\n%d,%d\n",a,b); printf(“\n%d,%d\n”,*pa,*pb) } 地址传递 运行结果: 9, 5 9,5 9, 5 交换了 指针变量所指变量 的值

第10章函数2【例】编写求三个数中最大数和最小数的函数,要求不能用return语句或全局变量将求得的最大数和最小数传回到主调函数中。#include mainOmax min(int a,int b,int c,int *p,int *q)int x,y,zmax,min;Yint m,n;printf("请输入三个整数:");if(a>b)scanf("%d%d%d",&x,&y,&z);(m=a; n=b;}max min(x,y,z&max,&min);elseprintf("最大数=%d,最小数(m=b; n=a;}=%dn",max,min);if(c>m) m=c;if(c<n) n=c;*p=m;/*间接引用变量max*/*q=n;/*间接引用变量min*/
第10章 函数2 【例】 编写求三个数中最大数和最小数的函数,要求不能用return语 句或全局变量将求得的最大数和最小数传回到主调函数中。 #include 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); }

第10章函数2数组名作函数实参维数组名作函数参数若想在被调函数中,对主调函数中某个数组的元素进行间接引用,则必须将该数组元素的地址传递到被调函数中。且只需要将该数组的首地址传递到被调函数中即可。即数组名为实参,指针变量作为对应的形参
第10章 函数2 数组名作函数实参 一维数组名 作函数参数 若想在被调函数中,对主调函数中某个数组的元素 进行间接引用,则必须将该数组元素的地址传递到被调 函数中。且只需要将该数组的首地址传递到被调函数中 即可。 即数组名为实参,指针变量作为对应的形参

第10章函数2【例10.3】编程序,实现在被调函数中将主调函数中的整型数组的内容前后倒置倒置前:a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]2810356794倒置后:a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]2835796104
第10章 函数2 【例10.3】 编程序,实现在被调函数中将主调函数 中的整型数组的内容前后倒置。 1 3 5 7 9 2 4 6 8 10 倒置后: a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9] 倒置前: a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9] 1 3 5 7 9 2 4 6 8 10

第10章函数2主函数:#include main(){ int a[i0],i;for(i=0:i<10:i++)scanf("%d",&a[il):inv(a, 10) ;/*实参是数组名*/for(i=0;i<10;i++)printf("%d",a[i]);printf("\n");人
第10章 函数2 主函数: #include main( ) { int a[10],i; for(i=0;i<10;i++) scanf("%d",&a[i]); inv(a,10); /*实参是数组名*/ for(i=0;i<10;i++) printf("%d ",a[i]); printf("\n"); }

第10章函数23*(r+0)a[0]被调函数:7a[1]*(r+1)void inv(int *r, int n)9a[2]*(r+2) int t,i,j;11a[3]*(r+3)i=0; j=n-l;0while(i<j)a[4]*(r+4)【 t=*(r+i);6a[5]*(r+5)*(r+i)=*(r+j) ;5a[6]*(r+6)*(r+j)=t;4a[7]*(r+7)i++; j--;26a[8]*(r+8)2a[9]*(r+9)
第10 章 函数 2 被调函数: void inv(int *r,int n ) { int t,i,j; i=0; j=n -1; while(i<j) { t=*(r+i); *(r+i)=*(r+j); *(r+j)=t; i++;j-; } } 379 110654 262 a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] *(r+0) *(r+1) *(r+2) *(r+3) *(r+4) *(r+5) *(r+6) *(r+7) *(r+8) *(r+9)

第10章函数2为了使得被调函数更直观,可将被调函数中的指针引用形式(包3a[0]r[0]括函数头中的指针形参)改写为数r[1]7a[1]组形式。啊啊啊啊勿啊9a[2]void inv(int rl,int n)11 int t,i, j;a[3]i=0;0a[4]j=n-1;6a[5]while(i<j)5{ t=r[i];a[6]r[i]=r[j];4a[7]r[j]=t;26a[8]i++; j--;2a[9]
第10 章 函数 2 379 110654 262 a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] r[0] r[1] r[2] r[3] r[4] r[5] r[6] r[7] r[8] r[9] 为了使得被调函数更直观,可 将被调函数中的指针引用形式(包 括函数头中的指针形参)改写为数 组形式。 void inv(int r[],int n) { int t,i,j; i=0; j=n -1; while(i<j) { t=r[i]; r[i]=r[j]; r[j]=t; i++;j- ; } }