c 指针函数 vs 函数指针
指针函数,函数指针
#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 函数指针的更多相关文章
- C++虚函数和函数指针一起使用
C++虚函数和函数指针一起使用,写起来有点麻烦. 下面贴出一份示例代码,可作参考.(需要支持C++11编译) #include <stdio.h> #include <list> ...
- C与指针(结构体指针,函数指针,数组指针,指针数组)定义与使用
类型 普通指针 指针数组(非指针类型) 数组指针 结构体指针 函数指针 二重指针 定义方式 int *p; int *p[5]; int (*p)[5]; int a[3][5]; struct{.. ...
- 你必须知道的指针基础-7.void指针与函数指针
一.不能动的“地址”—void指针 1.1 void指针初探 void *表示一个“不知道类型”的指针,也就不知道从这个指针地址开始多少字节为一个数据.和用int表示指针异曲同工,只是更明确是“指针” ...
- 12-返回指针的函数&&指向函数的指针
前言 接下来我只讲指针的最常见用法,比如这一章的内容----返回指针的函数 与 指向函数的指针 一.返回指针的函数 指针也是C语言中的一种数据类型,因此一个函数的返回值肯定可以是指针类型的. 返回 ...
- cocos2dx 3.x(获得父类的node型指针调用父类函数this->getParent())
void CenterLayer::zhanzheng(CCObject* pSender){ ((GameScene*)this->getParent())->showLayer(Gam ...
- 对线程等待函数pthread_join二级指针参数分析
分析之前先搞明白,这个二级指针其实在函数内部是承接了上个线程的返回值. 看man手册,发现返回值是个普通指针.人家用二级指针来承接,可能准备干大事.这个可以自己搜索一下.原因嘛,二级指针是保存了这个地 ...
- C语言指针变量作为函数参数
0x01 指针变量作为函数参数的作用是:将一个变量的地址传送到另一个函数中. 0x02 简单的例子:虽然都能实现功能,但意义不同. 正确的写法: #include <stdio.h> vo ...
- [Reprint]C++普通函数指针与成员函数指针实例解析
这篇文章主要介绍了C++普通函数指针与成员函数指针,很重要的知识点,需要的朋友可以参考下 C++的函数指针(function pointer)是通过指向函数的指针间接调用函数.相信很多人对指向一般 ...
- 指针数组vs数组指针 指针函数vs函数指针
在分辨这些重要的概念时,我们先回顾一下前面所讲的C之三值合一,由于三个值所求出的地址是相同的,所以经常有传言说他们都是首元素的地址.这种说法是不正确的.为什么说它是不正确的呢? 首先定义一个指针,将三 ...
- C:函数指针、回调函数
函数指针 是一个指针,指向函数的指针,指针存放的都是地址,所以函数指针存放的是函数的地址.数组名就是数组的首地址,函数名就是函数的首地址.与数组类似. 代码demo int (*p) (int ,in ...
随机推荐
- [CF960G] Bandit Blues
题意 给你三个正整数 \(n,a,b\),定义 \(A\) 为一个排列中是前缀最大值的数的个数,定义 \(B\) 为一个排列中是后缀最大值的数的个数,求长度为 \(n\) 的排列中满足 \(A = a ...
- [THUWC2017] 在美妙的数学王国畅游
Description 懒得概括了.. Solution 挺裸的LCT+挺裸的泰勒展开吧... 稍微了解过一点的人应该都能很快切掉...吧? 就是把每个点的函数泰勒展开一下然后LCT维护子树sum就行 ...
- React Fiber源码分析 第三篇(异步状态)
先附上流程图~ 调用setState时, 会调用classComponentUpdater的enqueueSetState方法, 同时将新的state作为payload参数传进 enqueueSetS ...
- Java并发(一)—— 使用多线程
Java的线程机制是抢占式的,所谓的抢占式指的是每一个线程都会被分配一个指定大小的时间片,一旦这个时间片用完,就会通过上下文切换到另一个线程上去. 并发是主要是为了提高单处理器的性能.创建一个线程会有 ...
- [转]MySQL查询缓存清空
本文转自:https://www.cnblogs.com/wangyiwei/p/7765457.html 可以通过下面的SQL查看当前查询缓存相关参数状态: SHOW VARIABLES LIK ...
- [转]Docker基础-使用Dockerfile创建镜像
本文转自:https://www.cnblogs.com/jie-fang/p/7927643.html 1.基本结构 Dockerfile由一行行命令语句组成,并支持以#开头的注释行.例如: # T ...
- IdentityServer开题篇
最近也研究了一段时间的IdentityServer4,园里关于IdentityServer的文章也很多,这里也简单写写,做做记录(文笔不佳,见谅). 1.identityserver是什么? Iden ...
- nginx 禁止未绑定的域名访问
nginx 禁止未绑定的域名访问 方法1: server { listen 80 default_server; #不指定 server_name, server_name 默认为"&quo ...
- 5. CopyOnWriteArrayList 的适用场景
package com.gf.demo04; import java.util.ArrayList; import java.util.Collections; import java.util.It ...
- Java高并发--AQS
Java高并发--AQS 主要是学习慕课网实战视频<Java并发编程入门与高并发面试>的笔记 AQS是AbstractQueuedSynchronizer的简称,直译过来是抽象队列同步器. ...