- 2
- 0
- 约2.2万字
- 约 122页
- 2019-08-26 发布于河南
- 举报
第十章 §10.1地址和指针的概念 §10.2 变量的指针和指向变量的指针变量 交换两个变量的值 #include stdio.h void swap(int x, int y) { int tmp; tmp = x; x = y; y = tmp; } int main( ) { int a = 1, b = 2; printf( Before exchange:a=%d, b=%d , a,b); swap(a, b); printf( “After exchange:a=%d, b=%d , a,b); return 0; } 优劣 效率:指针 直观:下标 注意: p++ *p++ 说明 (1) 定义的形式: 数据类型 (*指针变量名)( 形参表列 ); (2) 函数的调用可以通过函数名调用,也可以通过函数指针调用(*p)(实参表列)。 (3) (*p)()表示定义一个指向函数的指针变量,它并不固定指向哪一个函数的。 (4) 给函数指针变量赋值时,只需给出函数名而不必给出参数。 P=max; (5) 用指针变量调用函数时,只需将(*p)代替函数名。 c=(*p)(a,b); (6) p+n, p++, p--无意义 float *search(float (*pointer)[4]) { int i; float *pt; pt=*(pointer+1); for(i=0;i4;i++) if(*(*pointer+i)60) pt=*pointer; return(pt); } 10.5.2 用指向函数的指针作函数参数 函数指针变量常用的用途之一是把指针作为参数传递到其他函数。指向函数的指针也可以作为参数,以实现函数地址的传递,这样就能够在被调用的函数中使用实参函数。 调用:sub(f1, f2); 实参函数名 f1 f2 ↓ ↓ void sub(int (*x1)(int),int (*x2)(int,int)) { int a,b,i,j; a=(*x1)(i); /*调用f1函数*/ b=(*x2)(i,j);/*调用f2函数*/ … } 它的原理可以简述如下:有一个函数(假设函数名为sub),它有两个形参(x1和x2),定义x1和x2为指向函数的指针变量。在调用函数sub时,实参为两个函数名f1和f2,给形参传递的是函数f1和f2的地址。这样在函数sub中就可以调用f1和f2函数了。 例10.23 设一个函数process,在调用它的时候,每次实现不同的功能。输入a和b两个数,第一次调用process时找出a和b中大者,第二次找出其中小者,第三次求a与b之和。 #include stdio.h int max(int,int); /* 函数声明 */ int min(int,int); /* 函数声明 */ int add(int,int); /* 函数声明 */ void process (int,int,int(*fun)(int,int); /* 函数声明 */ void main() { int a,b; printf(″enter a and b:″); scanf(″%d,%d″,&a,&b); printf(″max=″); process(a,b,max); printf(″min=″); process(a,b,min); printf(″sum=″); process(a,b,add); } int max(int x,int y) /* 函数定义 */ {int z; if(x>y)z=x; else z=y; return(z); } int min(int x,int y) /* 函数定义 */ {int z; if(x<y)z=x; else z=y; return(z); } int add(int x,int y) /* 函数定义 */ {int z; z=x+y; return(z); } void process(int x,int y,int (*fun)(int,int)) {int result; result=(*fun)(x,y); printf
原创力文档

文档评论(0)