C语言指针函数和函数指针

定义方法

指针函数:   函数类型   *函数名(形参列表)

函数指针:   函数类型  (*指针变量名)(形参列表)

指针函数的实质就是一个函数,不过它的返回值是指针。所以重点谈一下函数指针。

在程序运行中,函数代码是程序的算法指令部分,它们和数组一样也占存储空间,都有相应的地址。可以使用指针指向数组的首地址,也可以使用指针变量指向函数代码的首地址,指向函数代码首地址的指针称为函数指针,它的定义方法如上。

上面的红色部分就是函数指针的名称,函数类型指的是该指针指向的函数的返回类型。形参列表指的是该指针指向的函数的形参列表。

注意:函数指针和它指向的函数的参数个数及类型必须一致。

如 int (*fu)(int x);     /*定义一个函数指针*/

函数指针的赋值

函数指针名代表了函数代码的首地址,因此赋值时直接将函数指针指向函数名就行了。例如:

int func(int x);      /*声明一个函数*/

int (*fu)(int x);     /*声明一个函数指针*/

fu = func;

赋值时func不带括号以及参数,因为func代表函数的首地址,fu = func就是一个地址赋给一个指针。

定义函数指针类型

typedef  int  (*PTRFUN)(int a);      //第一

它相当于

typedef  int (*)(int a)  PTRFUN;       //第二

但是这样写显然很乱,让人一眼看不清,所以就固定成第一种形式。它和

int  (*fu)(int a);

的区别是后者只是定义了一个函数指针,而前者是定义了函数指针类型PTRFUN,可以用它来定义其它函数指针,如

PTRFUN  pFun;

函数指针变量常见的用途是把函数指针作为参数传给其它函数,而这些“其它函数”除了函数指针这个参数以外一般还有其它参数,而此函数指针指向的函数往往就是处理这些“其它参数”的。例

 

  1. #include<stdio.h> 
  2.  
  3. max(int x, int y) 
  4.     int z; 
  5.     if(x>y) z=x; 
  6.     else z=y; 
  7.     return (z); 
  8. min(int x, int y) 
  9.     int z; 
  10.     if(x<y) z=x; 
  11.     else z=y; 
  12.     return (z); 
  13. add(int x, int y) 
  14.     int z; 
  15.     z=x+y; 
  16.     return (z); 
  17. process(int x, int y, int (*fun)(intint)) 
  18.     int result; 
  19.     result=(*fun)(x,y); 
  20.     printf("%d\n", result); 
  21. main() 
  22.     int max(intint); 
  23.     int min(intint); 
  24.     int add(intint); 
  25.     int a,b; 
  26.     printf("enter a and b:"); 
  27.     scanf("%d,%d",&a,&b); 
  28.     printf("max="); 
  29.     process(a,b,max); 
  30.     printf("min="); 
  31.     process(a,b,min); 
  32.     printf("sum="); 
  33.     process(a,b,add); 

运行结果:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章