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

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

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

第10章函数2 swap(int *pl,int *p2) 参数 int temp; 交换了 temp=*p1; *pl=*p2; 指针变量所指变量 *p2=temp; 的值 printf("n%d,%d\n",*pl,*p2) mainO int a,b; 运行结果: a=5;b=9; 9,5 swap(&a,&b); 9,5 9,5 printf("\n%d,%d n",a,b); printf("n%od,%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; a=5; b =9; swap(&a,&b); printf("\n%d,%d\n",a,b); printf(“\n%d,%d\n”,*pa,*pb) } 地址传递 运行结果: 9, 5 9,5 9, 5 交换了 指针变量所指变量 的值

第10章☒数2 【例】编写求三个数中最大数和最小数的函数,要求不能用return语 句或全局变量将求得的最大数和最小数传回到主调函数中。 #include max min(int a,int b,int c,int *p,int *q) mainO { int x,y,zmax,min; int m,n; printf('请输入三个整数:") if(a>b) scanf("%d%d%d",&x,&y,&z); {m=a;n=b;} max min(x,y,z&max,&min); else printf("最大数=%d,最小数 {m=b;n=a;} =%d小n",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 维数组名作函数参数 若想在被调函数中,对主调函数中某个数组的元素 进行间接引用,则必须将该数组元素的地址传递到被调 函数中。且只需要将该数组的首地址传递到被调函数中 即可。 即数组名为实参,指针变量作为对应的形参。 网☒D
第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] 13 5 7 92 4 6 8 10 倒置后: a[o]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9] 1 3 5 79 24 68 10
第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〈stdio.h> main() int a[10],i; for(i=0;<10;i+) scanf("%d”,&a[i]); 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章☒数2 *(r+0) 3 a[0] 被调函数: *(r+1) 7 a[1] void inv(int *r,int n) int t,i,j; *(r+2) 9 a2] i=0;j-n-1; *(r+3) 11 a[3] while(i<j) *(r+4) 0 a[4] {t=*(r+i); *(r+5) 6 a[5] *(r+i)=*(r+j); *(r+j)=t; *(r+6) 5 a[6] i++;j-; *(r+7) a7] *(r+8) 26 a[8] *(r+9) 2 a9]
第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 为了使得被调函数更直观,可 将被调函数中的指针引用形式(包 r[o] 3 a[0] 括函数头中的指针形参)改写为数 组形式。 r[1] a[1] void inv(int r[],int n) r[2] 9 a[2] int t,i,j; r[3] 11 a3] i=0; 0 j=n-1; r[4] a4] while(i<j) r[5] 6 a5] {t=r[i]; r[6] 5 a[6] r[i]=r[j]; r[j]=t; r7] a7] i+;j- r[8] 26 a[8] r[9] 2 a9]
第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- ; } }