(1)函数指针:
可以指向 一类 固定形参类型和返回值类型 的函数 的指针
声明:
int fun(int, int)
    ||
    \/
int (*pfun)(int, int)

pfun就是函数指针(变量)

调用:

d = pfun(a, b);
    e = (*pfun)(a, b);

#####指针函数
int *fun(int, int);
int *(fun(int, int));
#####

/*ex01.c*/
#include <stdio.h>

int max(int a, int b) {
    return (a > b ? a : b);
}
int min(int a, int b) {
    return (a < b ? a : b);
}

int main(int argc, char *argv[]) {
    int (*pfun)(int, int);
    pfun = max;
    int a = 0, b = 0, c = 0, d = 0, e = 0;
    fscanf(stdin, "%d%d", &a, &b);

c = max(a, b);
    d = pfun(a, b);
    e = (*pfun)(a, b);
    fprintf(stdout, "%d\n", c);
    fprintf(stdout, "%d\n", d);
    fprintf(stdout, "%d\n", e);
    return 0;
}

(2)定义函数指针的类型 可以声明函数指针变量
typedef int (*Pfun)(int, int);

Pfun就是自定义函数指针类型

Pfun pfun = min;

创建Pfun类型变量pfun并将min函数赋值它

/*ex02.c*/
#include <stdio.h>

typedef int (*Pfun)(int, int);

int max(int a, int b) {
    return (a > b ? a : b);
}
int min(int a, int b) {
    return (a < b ? a : b);
}

int main(int argc, char *argv[]) {
    Pfun pfun = min;
    int a = 0, b = 0, c = 0, d = 0, e = 0;
    fscanf(stdin, "%d%d", &a, &b);

c = min(a, b);
    d = pfun(a, b);
    e = (*pfun)(a, b);
    fprintf(stdout, "%d\n", c);
    fprintf(stdout, "%d\n", d);
    fprintf(stdout, "%d\n", e);
    return 0;
}

(3)可以将函数作为参数传入另一函数
#include <stdio.h>

typedef int (*Pfun)(int, int);

int max(int a, int b) {
    return (a > b ? a : b);
}
int min(int a, int b) {
    return (a < b ? a : b);
}

int dofun(Pfun pfun, int a, int b) {  //用Pfun类型的函数指针变量pfun接收传入的函数
    return pfun(a, b);
}

int main(int argc, char *argv[]) {
    Pfun pfun = min;
    int a = 0, b = 0, c = 0, d = 0, e = 0, f = 0;
    fscanf(stdin, "%d%d", &a, &b);

c = min(a, b);
    d = pfun(a, b);
    e = (*pfun)(a, b);
    f = dofun(min, a, b);      //将min函数作为参数传入dofun,dofun用相应类型的函数指针接收
    fprintf(stdout, "%d\n", c);
    fprintf(stdout, "%d\n", d);
    fprintf(stdout, "%d\n", e);
    fprintf(stdout, "%d\n", e);
    return 0;
}

C函数指针简单用例的更多相关文章

  1. c++ 函数指针简单实例

    一开始看函数指针的时候我是很懵的,因为不知道它有什么用,之后慢慢就发现了自己的愚昧无知. 假设我们想实现一个数据结构,比如二叉搜索树,堆.又或者是一个快排,归并排序. 我们一般是直接在两个数要比较的时 ...

  2. 谈谈自己对C语言中函数指针的一些理解 (第一次写博客,有点小兴奋哈)

    1.函数指针声明的格式及简单的使用 (1)格式:(返回值)(*函数指针名)(参数列表)    例如:声明一个无参数无返回值的函数指针(void)(*p)(void). (2)将函数指针指向某个无参数无 ...

  3. 成员函数指针与高性能C++委托

    1 引子 标准C++中没有真正的面向对象的函数指针.这一点对C++来说是不幸的,因为面向对象的指针(也叫做“闭包(closure)”或“委托(delegate)”)在一些语言中已经证明了它宝贵的价值. ...

  4. [转]成员函数指针与高性能的C++委托

    原文(作者:Don Clugston):Member Function Pointers and the Fastest Possible C++ Delegates 译文(作者:周翔): 成员函数指 ...

  5. C/C++函数指针详解(转)

    这两天在研究C/C++的函数指针,找到一篇讲解比较详细的博客,内容有点多,但是讲解得比较详细,适合初学者.特转之: 1.     无处不见的函数指针 使用函数指针可以设计出更优雅的程序,比如设计一个集 ...

  6. C/C++中的函数指针

    C/C++中的函数指针 一.引子 今天无聊刷了leetcode上的一道题,如下: Median is the middle value in an ordered integer list. If t ...

  7. C++使用简单的函数指针

    函数指针: 被调用函数指针必须包括函数的存储器地址,为了正常工作,指针还必须包括其它信息,这一参数列表指针的参数类型和返回类型的函数. 因此,当你声明一个函数指针,数的參数类型和返回类型.以及指针名. ...

  8. 简单计算器的C实现-函数指针,main函数传参

    /** 程序功能:简单计算器,实现加减乘除平方* 作者版本日期:2015.11.08 zhouhb OK* 源代码:李明 <新概念C语言培训>第33集 C语言Shell命令解释器的实现* ...

  9. Delphi下使用指针的简单总结(指针的赋值,数组和指针的转换,函数指针的使用)

    由于最近公司太忙,好久没有更新我的BLOG了.原来想着写写关于HOOK驱动的文章,可是最后想想好久已经没有做驱动的东西了,怕写出来有错误,于是作罢.开发游戏也有一段时间了,发现使用DELPHI来开发网 ...

随机推荐

  1. 配置sphinx

    1.先安装sphinxclient    #cd /usr/local/src    #wget http://sphinxsearch.com/files/sphinx-0.9.9.tar.gz   ...

  2. information_schema.profiling学习

    information_schema.profiling可以用来分析每一条SQL在它执行的各个阶段的用时,注意这个表是session 级的,也就是说如果session1 开启了它:session2没有 ...

  3. Material风格的Quick组件,妈妈再也不用担心我的界面不好看了

    https://github.com/papyros/qml-material http://www.zhihu.com/question/38523930

  4. HtmlAgilityPack - 简介

    HtmlAgilityPack是.net下的一个HTML解析类库.支持用XPath来解析HTML.这个意义不小,为什么呢?因为对于页面上的元素的xpath某些强大的浏览器能够直接获取得到,并不需要手动 ...

  5. 如何理解 css3 的 perspective 属性

    一.写在前面的话 最近想多了解一下CSS3的transform 3D效果,transform:英文直译就是转换,它可以实现旋转.缩放.位移等效果,听起来有没有觉得很酷的样子,狠狠的点这里来看看旋转和位 ...

  6. Kth Largest Element in an Array 解答

    Question Find the kth largest element in an unsorted array. Note that it is the kth largest element ...

  7. 什么是优先级队列(priority queue)?

    有时候我们需要在某个元素集合中找到最小值和最大值 .优先级队列抽象数据(Priority Queue ADT)模型是我们能够使用的方法之一,这是一种支持插入和删除最小值(DeleteMin)或者最大值 ...

  8. LeeCode-Pow(x, n)

    Implement pow(x, n). double myPow(double x, int n) { ) return 1.0; ) return 1.0/pow(x,-n); ); }

  9. dp 46(再做一遍)

    Robberies http://acm.hdu.edu.cn/showproblem.php?pid=2955 背包;第一次做的时候把概率当做背包(放大100000倍化为整数):在此范围内最多能抢多 ...

  10. hdu - 4651 - Partition

    题意:把一个整数N(1 <= N <= 100000)拆分不超过N的正整数相加,有多少种拆法. 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid ...