岁月留声QtAsp

Qt in Linux , Asp Asp.net Jsp Php in Web

« [转]软件公司的两种管理方式谁说大象不能跳舞 »

[转]函数指针

函数 - 函数指针
    先复习函数的定义与函数的声明:  //这是一个求和函数的定义:
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;
}
 

  • 相关文章:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

日历

Search

  •  

最新评论及回复

最近发表

Powered By Z-Blog 1.8 Spirit Build 80722 Code detection by Codefense

Copyright 2008-2011 京公网安备 110115000655 京ICP备09005635号 www.qtasp.cn WebSite. All Rights Reserved.