C语言 ---- 指针函数

//这是一个求和函数的定义: 
int add(int x, int y) 
{ 
  return(x + y); 
} 
  
//可以这样声明: 
int add(int x, int y); 
  
//也可以这样声明: 
int add(int, int);


定义一个函数指针声明一个函数差不多, 用 (* ) 包括函数即可:

//像这样: 
int (*pfun)(int, int); 
  
//或这样: 
int (*pfun)(int x, int y); 
  
//也可以: 
typedef int (*pfun)(int, int); 
  
//这就声明了一个叫 pfun 的函数指针, 能被它指向的函数一定要有相同的参数格式.


1. 简单例子:

#include <stdio.h> 
  
int add(int x, int y) {return(x + y);} 
int sub(int x, int y) {return(x - y);} 
int mul(int x, int y) {return(x * y);} 
int div(int x, int y) {return(x / y);} 
  
int main(void) 
{ 
  int (*pf)(int, int); 
  
  pf = add; 
  printf("%dn", pf(9, 3)); /* 12 */
   
  pf = sub; 
  printf("%dn", pf(9, 3)); /* 6 */
   
  pf = mul; 
  printf("%dn", pf(9, 3)); /* 27 */
   
  pf = div; 
  printf("%dn", pf(9, 3)); /* 3 */
   
  getchar(); 
  return 0; 
}


2. 函数指针数组:

#include <stdio.h> 
  
int add(int x, int y) {return(x + y);} 
int sub(int x, int y) {return(x - y);} 
int mul(int x, int y) {return(x * y);} 
int div(int x, int y) {return(x / y);} 
  
int main(void) 
{ 
  int (*pf[4])(int, int) = {add, sub, mul, div}; 
  
  printf("%dn", pf[0](9, 3)); /* 12 */
  printf("%dn", pf[1](9, 3)); /* 6 */
  printf("%dn", pf[2](9, 3)); /* 27 */
  printf("%dn", pf[3](9, 3)); /* 3 */
   
  getchar(); 
  return 0; 
}


3. 用函数指针做参数:

#include <stdio.h> 
  
int add(int x, int y) {return(x + y);} 
int sub(int x, int y) {return(x - y);} 
int mul(int x, int y) {return(x * y);} 
int div(int x, int y) {return(x / y);} 
  
int math(int(*pfun)(int, int), int x, int y) { 
  return pfun(x, y); 
} 
  
int main(void) 
{ 
  printf("%dn", math(add, 9, 3)); /* 12 */
  printf("%dn", math(sub, 9, 3)); /* 6 */
  printf("%dn", math(mul, 9, 3)); /* 27 */
  printf("%dn", math(div, 9, 3)); /* 3 */
   
  getchar(); 
  return 0; 
}


 

 来自:http://tech.ddvip.com/2009-02/1235555402109762.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值