C语言基础学习6: 指向函数的指针
1、函数指针变量调用函数
1 #include <stdio.h> 2 int max(int x, int y); 3 int max(int x, int y) 4 { 5 int z; 6 if(x<y) 7 z = y; 8 else 9 z = x; 10 return z; 11 } 12 void main() 13 { 14 int a,b,c; 15 scanf("a=%d,b=%d",&a,&b); 16 c = max(a,b); 17 printf("max = %d\n",c); 18 }
用函数指针调用函数:
1 #include <stdio.h> 2 int max(int x, int y); 3 int max(int x, int y) 4 { 5 int z; 6 if(x<y) 7 z = y; 8 else 9 z = x; 10 return z; 11 } 12 void main() 13 { 14 int a,b,c; 15 int (*p)(int x, int y); 16 scanf("a=%d,b=%d",&a,&b); 17 p = max; 18 c = (*p)(a,b); 19 printf("max = %d\n",c); 20 }
指针变量可以指向整型、字符串、数组,也可以指向一个函数。一个函数在编译时被分配一个入口地址,这个函数的入口地址就称为函数的指针。可以用一个指针变量指向这个函数,然后通过该指针变量调用此函数。
指向函数的指针变量的一般定义形式为:
数据类型 (*指针变量名)(函数参数列表)
例如上面的 int (*p)(int x, int y);
这里注意圆括号不能省去,因为()的优先级高于*,声明成了一个p函数,函数的返回值是指向整型变量的指针。
p = max; 作用是将函数max的入口地址赋给指针变量p。
和数组名表示数组首元素地址类似,函数名代表该函数的入口地址。
因此函数的调用可以通过函数名调用,也可以通过函数指针调用(即用指向函数的指针变量调用)。
注意:
(1)int (*p)(int x, int y); 表示一个指向函数的指针变量p,它不是固定指向哪一个函数的,而只是表示定义了这样一个类型的变量,它是专门用来存放函数的入口地址的。在一个程序中,一个指针变量可以先后指向同类型的不同函数。
(2)在给函数指针变量赋值时,只需给出函数名而不必给出参数,例如:p=max;因为是将函数入口地址赋给p,而不牵涉实参与形参的结合问题。
(3)用函数指针变量调用函数时,只需将(*p)代替函数名即可(p为指针变量名)。例如:c = (*p)(a, b);
(4)对指向函数的指针变量,像p+n,p++,p--等运算是无意义的。
2、用指向函数的指针作函数参数
函数指针变量通用的用途之一是把指针作为参数传递到其它函数。
函数的参数可以是变量、指向变量的指针变量、数组名、指向数组的指针变量,指向函数的指针也可以作为参数,以实现函数地址的传递,这样就能够在被调用的函数中使用实参函数。
1 #include <stdio.h> 2 int max(int x, int y); 3 int min(int x, int y); 4 int sum(int x, int y); 5 void process(int x, int y, int (*p)(int x, int y)); 6 int max(int x, int y) 7 { 8 int z; 9 if(x>y) 10 z = x; 11 else 12 z = y; 13 return z; 14 } 15 int min(int x, int y) 16 { 17 int z; 18 if(x>y) 19 z = y; 20 else 21 z = x; 22 return z; 23 } 24 int sum(int x, int y) 25 { 26 int z; 27 z = x + y; 28 return z; 29 } 30 void process(int x, int y, int (*p)(int x, int y)) 31 { 32 int z; 33 z = (*p)(x,y); 34 printf("%d\n",z); 35 } 36 37 void main() 38 { 39 int a,b; 40 printf("Please Input Two Numbers:"); 41 scanf("a=%d,b=%d",&a,&b); 42 printf("\n"); 43 printf("Max Number is:"); 44 process(a,b,max); 45 printf("Min Number is:"); 46 process(a,b,min); 47 printf("The Sum is:"); 48 process(a,b,sum); 49 }
posted on 2014-07-20 10:57 Iambitiousman 阅读(390) 评论(0) 编辑 收藏 举报