(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. tp中u方法的使用

    自学的时候都没怎么使用过该方法,现在刚进入一个新公司参加项目.发现这个方法用的很多,所以记录下来防止以后忘了. U方法用于完成对URL地址的组装,特点在于可以自动根据当前的URL模式和设置生成对应的U ...

  2. Delphi 10.1 Berlin 与 Delphi 10 Seattle 共存

    以下安装环境是win7 64位 1. 安装Delphi10.1 Berlin 版本. 2.修改C:\Program Files (x86)\Embarcadero\Studio\18.0\cglm.i ...

  3. 网关协议学习:CGI、FastCGI、WSGI、uWSGI

    一直对这四者的概念和区别很模糊,现在就特意梳理一下它们的关系与区别. CGI CGI即通用网关接口(Common Gateway Interface),是外部应用程序(CGI程序)与Web服务器之间的 ...

  4. Robberies(HDU 2955 DP01背包)

    Robberies Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  5. Ultra-QuickSort(树状数组+离散化)

    Ultra-QuickSort  POJ 2299 Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 50495   Accep ...

  6. 跪求 EF缓存问题 也不知道是不是缓存 问题

    1.数据库里面查的结果 2 vs里面查的结果   为什么 不是16 而是2 下面是代码 /// <summary> /// 权限检查 /// </summary> public ...

  7. C# Process类_进程管理器Demo

    Process用于管理计算机的进程,下面给出一个C#进程管理器的DEMO. namespace ProcessManager { public partial class Form1 : Form { ...

  8. DataTable类

    DataTable是一个使用非常多的类,记得我在刚刚开始学习.Net的时候就已经了解并用过这个类,但如今再来看看,才发现这个类非常之复杂,复杂表现在哪些地方呢?主要是这个类与其他很多类都有关联,也就是 ...

  9. 编解码学习笔记(十):Ogg系列

    Ogg是一个自由且开放标准的容器格式,由Xiph.Org 基金会所维护.Ogg格式并不受到软件专利的限制,并设计用于有效率地串流媒体和处理高质量的数字多媒体. Ogg意指一种文件格式,能够纳入各式各样 ...

  10. Python标准库:内置函数classmethod(function)

    把类函数当作类的一个方法返回. 类方法第一个參数是指明类,跟类中函数一样,第一个參数是指明类实例. 类方法修饰符採用以下的格式来使用: class C: @classmethod def f(cls, ...