2026年11月2日 · 今日 0 帖 · 会员 6.1万 · 主题 17.4万
登录 · 注册 · 游客,欢迎随便逛逛
返回版块
只看作者:洞房 查看全部
1000
Lv9有为九子能等级图标
勋章勋章勋章勋章勋章
帖子
9.3万
回复
2,089
积分
60.3万
注册
2006-12-06
[怀旧国机]

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

[复制链接]
查看 189 回复 0
楼主 发表于 | 查看全部
1 人收藏

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

//这是一个求和函数的定义:

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(“%d\n“, pf(9, 3)); /* 12 */

  pf = sub;

  printf(“%d\n“, pf(9, 3)); /* 6 */

  pf = mul;

  printf(“%d\n“, pf(9, 3)); /* 27 */

  pf = div;

  printf(“%d\n“, 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)(int, int) = {add, sub, mul, div};

  printf(“%d\n“, pf(9, 3)); /* 12 */

  printf(“%d\n“, pf(9, 3)); /* 6 */

  printf(“%d\n“, pf(9, 3)); /* 27 */

  printf(“%d\n“, pf(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(“%d\n“, math(add, 9, 3)); /* 12 */

  printf(“%d\n“, math(sub, 9, 3)); /* 6 */

  printf(“%d\n“, math(mul, 9, 3)); /* 27 */

  printf(“%d\n“, math(div, 9, 3)); /* 3 */

  getchar();

  return 0;

}

登录回复

登录后可以回复这个帖子。旧账号可使用原密码登录。

登录 注册新号
← 返回版块