指针作函数参数(精)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
几个注意事项——
(1)函数调用可以通过函数名,也可通 过函数指针。 (2)指针变量可以先后指向不同的函数。 (3)对指向函数的指针变量作运算是无 意义的。
本节我们学习了
指针做函数参数
指针与函数的关系
函数参数传递的原理
指针作函数参数
数组作函数参数
swap(int b[]) {int p; p=b[0]; b[0]=b[1]; b[1]=p; }
交换形参数组值
main( ) {int a[2];
scanf(“%d%d”,&a[0],&a[1]); if(a[0]<a[1]) swap(a); printf(“%d,%d\n”, a[0],a[1]); } 运行情况:
指针做函数参数
计算机学院:张彦航
学习目标
熟练掌握指针做函数参数的方法
进一步理解函数参数传递的原理 明确指针与函数的关系
指针概念回顾:
每个变量名都与一个唯一的地址相对应, 用于存放特定类型的数据。 指针:一个变量的地址称为该变量的指针。
指针与地址的区别:
指针不但指示了数据的存储位置,还标明 了该数据的类型。
*(p+1)=„\0‟;
Return s;
}
指向函数的指针
1、定义形式:
数据类型标识符 (*指针变量名)( );
2、调用形式:
(*指针变量名)(实参表);
main() { int (*p)(); int a,b,c;
/* 声明指向函数的指针变量p */
p=max; /* 指向函数的指针变量p赋初值 */ scanf(“%d,%d”,&a,&b); c=(*p)(a,b); /* 函数调用*/ printf(“a=%d,b=%d,max=%d”,a,b,c); } int max(int x,int y) { int z; if(x>y)z=x; else z=y; return(z); }
5 9 9,5
数组作函数参数
普通变量作函数参数
swap(int x, int y) {int p; p=x; x=y; y=p; }
交换形参变量值
main( ) {int a,b; scanf(“%d,%d”,&a,&b); if(a<b) swap(a, b); printf(“%d,%d\n”,a,b); } 运行情况:
*p = *p1; *p1 = *p2; *p2 = *p; }
为什么使用指针做函数参数?
用指针作函数参数,可以返回多个值 减少参数传递过程中的数据复制量。 用指针作函数参数,通过将数据区的 地址传递给函数,使函数能够改动该 地址处的数据。
用指针作函数参数,可以返回多个值
#include<stdio.h> void subfun(int *m, int *n); /*说明子函数*/ main() { int i, j; printf("i, j=?\n"); scanf("%d, %d", &i, &j);
变量的指针作函数参数
作用:将一个变量的地址传至另外一个函数中。 swap(int *p1,int *p2) {int p; p=*p1; *p1=*p2; *p2=p; }
交换指针所指 向的变量值
main( ) 运行情况: 5,9 {int a,b; 9,5 int *pa, *pb; scanf(“%d,%d”,&a,&b); pa=&a; pb=&b; if(a<b) swap(pa, pb); printf(“%d,%d\n”,a,b); }
5,9 5,9
普通变量作函数参数
swap函数的几种错误形式(1/2)
void Swap(int *p1, int *p2)
{
int *p; p = p1; /*p1,p2为内部变量*/
p1 = p2;
p2 = p;
}
指针作函数参数
swap函数的几种错误形式(2/2)
void Swap(int *p1, int *p2) { int *p; /*指针p未初始化*/
指针和函数的关系主要包括:
1、指针作为函数的参数。 2、函数的返回值可以是指针类型 3、指针可以指向函数。
函数的返回值为指针。
例:去掉参数字符串的尾部空格。 Char *mytrim( char *s) { chaBaidu Nhomakorabea *p=s+strlen( s)-1; while( p-s>=0&&*p!=„\0‟)p--;
printf(“ before calling i=%d j=%d i*j=%d\n”, i, j, i*j); subfun(&i, &j); /*以传送地址的方式调用子函数*/ printf(“after calling i=%d j=%d i*j=%d\n", i, j, i*j); } void subfun(int *m, int *n) { *m=*m+2; *n=*m-*n; }