Chinaunix首页 | 论坛 | 博客
  • 博客访问: 176657
  • 博文数量: 89
  • 博客积分: 30
  • 博客等级: 民兵
  • 技术积分: 565
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-24 10:16
文章分类

全部博文(89)

文章存档

2013年(1)

2012年(1)

2011年(8)

2010年(45)

2009年(34)

我的朋友

分类: C/C++

2010-04-16 09:56:27

学点 C 语言(38): 函数 - 函数指针

 

先复习函数的定义与函数的声明:

//这是一个求和函数的定义:
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 

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 

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 

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;
}

阅读(339) | 评论(0) | 转发(0) |
0

上一篇:ctags使用简介

下一篇:学习 C 语言

给主人留下些什么吧!~~