指针函数,函数指针

#include <stdio.h>

int max(int a, int b){
return a > b ? a : b;
} //函数指针,2个int参数,int返回值
int(*pfun)(int, int); //函数的第三个参数是函数指针,int返回值
int fun(int a, int b, int(*f)(int, int)){
return (*f)(a,b);
} //这是指针(返回值是指针)函数,函数的第三个参数是函数指针,int*返回值
int* fun2(int a, int b, int(*f)(int, int)){
static int i;
i = (*f)(a,b);
return &i;
} //这是指针函数,返回函数指针,返回的函数指针,指向的函数为返回值为int, 2个int参数。这个函数有3个参数,前2个是int参数,第三个参数是函数指针,指向的函数为int返回值,2个int参数。
//完全理解不了
int(*fun1(int a, int b, int(*f)(int, int)))(int, int){
return f;
}
//下面的是很容理解的,但是编译不过,返回值是函数指针,指向的函数为返回值为int, 2个int参数。函数名为fun1,有3个参数,第三个参数是函数指针,指向的函数为返回值为int, 2个int参数。
//int(*)(int, int) fun4(int a, int b, int(*f)(int, int)){
// return f;
//} //下面的typedef含义是用,声明了一个新的类型叫pf,它是函数指针,所指向的函数为int返回值,2个int参数。
typedef int(*pf)(int,int);
//pf为fun3的返回值,第三个参数的类型为pf,完美的解决了上面的fun4不能编译通过的问题
pf fun3 (int a, int b, pf f){
return f;
} int main(){ pfun = &max;
int i;
i = (*pfun)(3,2);
printf("%d\n", i); i = fun(23,34, max);
printf("%d\n", i); int *j;
j = fun2(43,56,max);
printf("j = %d\n", *j); pfun = fun1(23,44,max);
i = (*pfun)(45,67);
printf("pfun %d\n", i); pfun = fun3(23,44,max);
i = (*pfun)(451,267);
printf("pfun %d\n", i);
}

c 指针函数 vs 函数指针的更多相关文章

  1. C++虚函数和函数指针一起使用

    C++虚函数和函数指针一起使用,写起来有点麻烦. 下面贴出一份示例代码,可作参考.(需要支持C++11编译) #include <stdio.h> #include <list> ...

  2. C与指针(结构体指针,函数指针,数组指针,指针数组)定义与使用

    类型 普通指针 指针数组(非指针类型) 数组指针 结构体指针 函数指针 二重指针 定义方式 int *p; int *p[5]; int (*p)[5]; int a[3][5]; struct{.. ...

  3. 你必须知道的指针基础-7.void指针与函数指针

    一.不能动的“地址”—void指针 1.1 void指针初探 void *表示一个“不知道类型”的指针,也就不知道从这个指针地址开始多少字节为一个数据.和用int表示指针异曲同工,只是更明确是“指针” ...

  4. 12-返回指针的函数&&指向函数的指针

    前言 接下来我只讲指针的最常见用法,比如这一章的内容----返回指针的函数 与 指向函数的指针   一.返回指针的函数 指针也是C语言中的一种数据类型,因此一个函数的返回值肯定可以是指针类型的. 返回 ...

  5. cocos2dx 3.x(获得父类的node型指针调用父类函数this->getParent())

    void CenterLayer::zhanzheng(CCObject* pSender){ ((GameScene*)this->getParent())->showLayer(Gam ...

  6. 对线程等待函数pthread_join二级指针参数分析

    分析之前先搞明白,这个二级指针其实在函数内部是承接了上个线程的返回值. 看man手册,发现返回值是个普通指针.人家用二级指针来承接,可能准备干大事.这个可以自己搜索一下.原因嘛,二级指针是保存了这个地 ...

  7. C语言指针变量作为函数参数

    0x01 指针变量作为函数参数的作用是:将一个变量的地址传送到另一个函数中. 0x02 简单的例子:虽然都能实现功能,但意义不同. 正确的写法: #include <stdio.h> vo ...

  8. [Reprint]C++普通函数指针与成员函数指针实例解析

    这篇文章主要介绍了C++普通函数指针与成员函数指针,很重要的知识点,需要的朋友可以参考下   C++的函数指针(function pointer)是通过指向函数的指针间接调用函数.相信很多人对指向一般 ...

  9. 指针数组vs数组指针 指针函数vs函数指针

    在分辨这些重要的概念时,我们先回顾一下前面所讲的C之三值合一,由于三个值所求出的地址是相同的,所以经常有传言说他们都是首元素的地址.这种说法是不正确的.为什么说它是不正确的呢? 首先定义一个指针,将三 ...

  10. C:函数指针、回调函数

    函数指针 是一个指针,指向函数的指针,指针存放的都是地址,所以函数指针存放的是函数的地址.数组名就是数组的首地址,函数名就是函数的首地址.与数组类似. 代码demo int (*p) (int ,in ...

随机推荐

  1. Tomcat(一):背景知识和安装tomcat

    Tomcat系列文章:http://www.cnblogs.com/f-ck-need-u/p/7576137.html 1. 基础背景知识 1.1 java和jdk概念 无论是何种程序,要能在计算机 ...

  2. Go基础系列:Go实现工作池的两种方式

    worker pool简介 worker pool其实就是线程池thread pool.对于go来说,直接使用的是goroutine而非线程,不过这里仍然以线程来解释线程池. 在线程池模型中,有2个队 ...

  3. YARN集群的mapreduce测试(六)

    两张表链接操作(分布式缓存): ----------------------------------假设:其中一张A表,只有20条数据记录(比如group表)另外一张非常大,上亿的记录数量(比如use ...

  4. 快速制作gif动图

    0.环境准备 gif动画录制工具,下载后可以直接安装: 安装提示需要.net framework4.0.30319环境的话,下载一个直接安装即可 1.开始录制 安装成功界面: 开始录制: 录制效果如下 ...

  5. IE的浏览器模式、文本模式

    最近在部署网页的时候,发现IE下的布局完成混乱. 在改变IE的文本模式后,显示就正常了. IE的浏览器模式,用于切换IE针对该网页的默认文本模式.对不同版本浏览器的条件注释解析.决定请求头里userA ...

  6. MEF 基础简介 二

    MEF的导出(Export)和导入(Import) using System; using System.Collections.Generic; using System.Linq; using S ...

  7. input type=file 上传文件样式美化(转载)

    input type=file 上传文件样式美化 来源:https://www.jianshu.com/p/6390595e5a36 在做input文本上传时,由于html原生的上传按钮比较丑,需要对 ...

  8. stringMVC_09文件批量上传

    一.思路 在文件上传的基础上引入数组可以实现批量上传,只需要更改一下前段页面和controller类即可 文件上传: https://www.cnblogs.com/aihuadung/p/10167 ...

  9. python网络聊天器多线程版

    在之前的一篇文章(python网络编程-udp)中实现了一个简单的udp聊天器,只能在单线程下进行收发数据,在学习完多线程之后,实现一个能同时收发数据的udp聊天器. 说明: 编写一个有2个线程的程序 ...

  10. junit单元测试注意的问题

    1.有返回值的方法不能直接测试 2.带参数的方法不能直接测试 3.访问权限在public一下的方法不能直接测试 4.static静态方法不能直接测试 5.不能给出现前四个条件中任意一个的方法添加@Te ...