
《C语言程序设计》 函数深入
《 C语言程序设计》 函数深入

指针做参数的经典例子一交换两个整数值 #include "stdio.h" void swap(int m,int n) (main) 2000 变量a 5 2004 变量b int temp; 8 2908 temp=m; 200C m=n; 2010 n=temp; (swap) 2014 一变量m 8 main() 2D18 变量n 5 201C 变量temp 5 int a,b; 2020 scanf ("%d,%d",&a,&b); swap (a,b); printf ("n%d,%d n",a,b); 运行结果:5,8
目标要求 讲课提纲 讲课内容 课后作业 退出 #include "stdio.h" void swap(int m,int n) { int temp; temp=m; m=n; n=temp; } main() { int a,b; scanf("%d,%d",&a,&b); swap(a,b); printf("\n%d,%d\n",a,b); } . 2000 2010 2014 2004 2008 200C 2018 201C 2020 . 变量a 变量b (main) (swap) 变量m 变量n 变量temp 8 5 5 8 5 指针做参数的经典例子—交换两个整数值 运行结果:5,8 8 5 值传递

指针做参数的经典例子一交换两个整数值 swap(int *pl,int *p2) { int p; (main) 2000 整型变量a p=*pl; 8 2004 整型变量b *pl=*p2; 5 地址传递 2008 指针pointer_I *p2=p; 2000 200C 指针pointer_2 2010 2004 mainO COPY 2014 (swap) int a,b; 指针pl 2000 int *pointer 1,*pointer 2; 2018 一指针p2 2004 scanf("%d,%d",&a,&b); 201C 整型p 5 pointer_1=&a;pointer 2=&b; 2020 swap(pointer_1,pointer_2); printf("\n%d,%d n",a,b); 运行结果:8,5 目标要求 讲课提纲 讲课内容 课后作业 退出
目标要求 讲课提纲 讲课内容 课后作业 退出 swap(int *p1, int *p2) { int p; p=*p1; *p1=*p2; *p2=p; } main() { int a,b; int *pointer_1,*pointer_2; scanf("%d,%d",&a,&b); pointer_1=&a; pointer_2=&b; swap(pointer_1,pointer_2); printf("\n%d,%d\n",a,b); } . 2000 2010 2014 2004 2008 200C 2018 201C 2020 . 5 8 整型变量a 整型变量b (main) 指针pointer_1 指针pointer_2 2000 2004 (swap) 指针p1 指针p2 整型p 5 8 2000 2004 COPY 5 地址传递 运行结果:8,5 指针做参数的经典例子—交换两个整数值

指针及其应用 指针变量作为函数形参 将指针变量作为函数的形参一地址扯传递 特点:共享内存,“双向”传 递 目标要求 讲课提纲 讲课内容 课后作业 退出
目标要求 讲课提纲 讲课内容 课后作业 退出 指针及其应用 将指针变量作为函数的形参-地址传递 指针变量作为函数形参 特点:共享内存,“双向”传 递

不能企图通过改变指针形参的值而使指针实参 的值改变。 #include "stdio.h swap(int *pm,int *pn) int *pt; pt=pm; pm=pn pn=pt; 输入:5,8 main() 运行结果:5,8 int a,b,*pl,*p2; scanf ("%d,%d",&a,&b); p1=&a;p2=&b; 为什么 swap(p1,p2); printf ("\n%d,%d n",*p1,*p2); 目标要求 退出
目标要求 讲课提纲 讲课内容 课后作业 退出 不能企图通过改变指针形参的值而使指针实参 的值改变。 #include "stdio.h" swap(int *pm,int *pn) { int *pt; pt=pm; pm=pn; pn=pt; } main() { int a,b,*p1,*p2; scanf("%d,%d",&a,&b); p1=&a;p2=&b; swap(p1,p2); printf("\n%d,%d\n",*p1,*p2); } 输入:5,8 运行结果:5,8 为什么

数组名作函数参数 数组名作函数参数,是地址传递 数组名作函数参数,实参与形参的对应关系 实参 形参 数组名 数组名 数组名 指针变量 指针变量 数组名 指针变量 指针变量 目标要求 讲课提纲 讲课内容 课后作业 退出
目标要求 讲课提纲 讲课内容 课后作业 退出 数组名作函数参数,是地址传递 数组名作函数参数,实参与形参的对应关系 实参 形参 数组名 指针变量 数组名 指针变量 数组名 数组名 指针变量 指针变量 数组名作函数参数

数组名作函数参数 ●●●● ●●● 形参数组与实参数组之间的结合要注意以下几点: 1.调用函数与被调用函数中分别定义数组,其数组 名可以不同,但类型必须一致。 2. 实参数组与形参数组的结合是采用地址结合的, 从而可以实现数据的“双向”传递。 3. 实参数组与形参数组的大小可以一致也可以不一 致,C编译系统对形参数组的大小不作检查,调 用时只将实参数组的首地址传给形参数组。 4.虽然函数中的形参数组一般不指定大小,但为了 控制形参数组的使用范围,一般要在函数中另设 一个传送形参数组元素个数的形参变量, 目标要求 讲课提纲 讲课内容 课后作业 退出
目标要求 讲课提纲 讲课内容 课后作业 退出 形参数组与实参数组之间的结合要注意以下几点: 1. 调用函数与被调用函数中分别定义数组,其数组 名可以不同,但类型必须一致。 2. 实参数组与形参数组的结合是采用地址结合的, 从而可以实现数据的“双向”传递。 3. 实参数组与形参数组的大小可以一致也可以不一 致,C编译系统对形参数组的大小不作检查,调 用时只将实参数组的首地址传给形参数组。 4. 虽然函数中的形参数组一般不指定大小,但为了 控制形参数组的使用范围,一般要在函数中另设 一个传送形参数组元素个数的形参变量, 数组名作函数参数

数组名作函数参数 例:用指针变量作函数参数找一维数组中最大值 #include "stdio.h int max (int *q) main() {int n,i; { n=*q; int a[10],m,*p; for(i=1;i<10;i+) for(p=a;p<a+10;p++) if (n<*(q+i)) scanf("%d”,p); n=*(q+i); m=max (a) return (n); printf("m=‰d",m); 目标要求 讲课提纲 讲课内容 课后作业 K 退出
目标要求 讲课提纲 讲课内容 课后作业 退出 例:用指针变量作函数参数找一维数组中最大值 #include "stdio.h " main() { int a[10],m,*p; for(p=a;p<a+10;p++) scanf("%d",p); m=max(a); printf("m=%d",m); } int max(int *q) {int n,i; n=*q; for(i=1;i<10;i++) if(n<*(q+i)) n=*(q+i); return(n); } 数组名作函数参数

数组名作函数参数 >将数组a中的n个整数按相反顺序存放。 379 11 675 m 2 4 5 6 3 目标要求 讲课提纲 (讲课内容 课后作业 退出
目标要求 讲课提纲 讲课内容 课后作业 退出 ➢ 将数组a中的n个整数按相反顺序存放。 数组名作函数参数

数组名作函数参数 void inv(int[],intn)/*形参x是数组名*/ { int temp,i,j=(n-1); for(i=0;i<=ji++,j-) temp=x[i];x[i]=x[j];x[j]=temp; 目标要求 讲课提纲 讲课内容 课后作业 退出
目标要求 讲课提纲 讲课内容 课后作业 退出 void inv(int x[],int n) /*形参x是数组名*/ { int temp,i,j=(n-1); for(i=0;i<=j;i++,j-) { temp=x[i];x[i]=x[j];x[j]=temp; } } 数组名作函数参数