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 ...
随机推荐
- 【Flask-RESTPlus系列】Part1:快速入门
0x00 内容概览 Flask-RESTPlus安装 快速入门 初始化 一个最简单的API示例 资源路由 端点 参数解析 数据格式化 顺序保留 完整例子 0x01 Flask-RESTPlus安装 1 ...
- Go中iota是什么
Go iota是一个比较奇怪的存在,它只能用在const的申明中,是一个从0开始的行数索引器. 看代码 package main import ( "fmt" ) const ( ...
- 监控MySQL组复制
使用 Perfomance Schema 中的表来监控组复制,假定你的MySQL编译时已经启动了 Performance Schema 表.组复制将添加如下两张 P_S 表: performance_ ...
- Go基础系列:Go中的方法
Go方法简介 Go中的struct结构类似于面向对象中的类.面向对象中,除了成员变量还有方法. Go中也有方法,它是一种特殊的函数,定义于struct之上(与struct关联.绑定),被称为struc ...
- Python系列:五、异常处理-技术流ken
至今为止还没有进一步的谈论过错误信息,不过在你已经试验过的那些例子中,可能已经遇到过一些.Python 中(至少)有两种错误:语法错误和异常( syntax errors 和 exceptions ) ...
- Django 系列博客(七)
Django 系列博客(七) 前言 本篇博客介绍 Django 中的视图层中的相关参数,HttpRequest 对象.HttpResponse 对象.JsonResponse,以及视图层的两种响应方式 ...
- WPF里ItemsControl的分组实现 --listbox 实现分组
我们在用到ItemsControl时,有时会用到分组,如ListBox,ListView,DataGrid.WPF的ItemsControl可以实现分组,是依托于GroupStyle,以ListBox ...
- IDEA更换主题
更换IDEA主题只需要3步 1. 下载主题 在主题网站上IDEA Color Themes 上浏览喜欢的主题并下载该主题.(如果网址有变更,google IDEA themes即可.) 2. 导入主 ...
- C#基础知识总结(二)
摘要 第二篇主要讲:变量.连接符占位符等.转义字符.数据的计算.数据的转换.try-catch的简单熟悉.复合运算符和自加自减 一.变量 1.数据存储在内存中:内存叫做RAM,内存被分隔为一小格一小格 ...
- Java学习笔记之——Object类
所有类的祖先 如果一个类没有显式继承,则继承Object 每一个类都直接或间接的是Object的子类 相关API: protected Objectclone() 创建并返回此对象的副本. boole ...