函数指针

原创 2016年09月20日 23:58:29

和其他简单变量一样,编译阶段会给函数代码块分配一块内存,内存的首地址其实就是函数的名字,通常也称作指向函数的指针,即函数指针。

如下 :

int max(int a,int b){
	int result = a > b ? a : b;
	
	cout<<result<<endl;
}
这个函数返回a ,  b两数的最大者,我们可以为定义一个指向这个函数的指针fun:

int (*fun)(int,int);  ①

那么,我们说fun的类型是 int  ( * ) (int ,int ) ,就和我们说  int  age = 0 ,  age  的 类型是int一样,再来看看  出的代码是个什么意思:

## 它表示fun指向一个返回值是 int  ,参数为两个 int 值得函数。##


注意,不能写成 int  * fun ( int , int ) ,因为()的优先级比* 高 ,int  * fun ( int , int ) 表示 参数为两个 int 类型的fun函数 返回一个指向 int 的指针。


以下是两个例子 :


例子 1 :

#include<iostream>

using namespace std;

int max(int a,int b){
	int result = a > b ? a : b;
	
	cout<<result<<endl;
}

int main(){
	
	//定义fun为 int (*)(int,int) 类型的函数指针。 
	int (*fun)(int,int);
	
	fun = max;
	(*fun)(23,56);
	
	(*fun)(100,78);
		
	return 0;
}

结果 :




例子 2 :


#include<iostream>

using namespace std;

typedef struct App{
	void *userData;
}App;

/**
*
*void (*)() :表示返回值是void,参数也是void(无参数)的函数 . 
*
*/

// 将 void (*)() 类型用typedef 定义为 FUNTYPE类型. 
typedef void(* FUNTYPE)();

void callFunction(App *app){
	/*
	* 将void * 的userData强转成FUNTYPE类型,即 void (*)()类型.
	*并执行这个函数. 
	*/
	(*((FUNTYPE)(app->userData)))();
}

void hello(){
	
	cout<<"Hello world!"<<endl;
}

int main(){
	App *app=new App;
	
	//将 void (*)() 类型的地址转换成 void * 
	app->userData=(void *)hello;
	
	callFunction(app);
	
	delete app;
	
	return 0;
}


结果 :




函数指针与回调函数详解

函数指针与回调函数详解1.什么是函数指针?函数指针就是指针。这个指针存放一个函数的地址,而函数的名称就该函数的入口,即地址。这类似于数组名就是数组的首地址。我们可以通过反汇编直观的查看到函数名和函数地...
  • men_wen
  • men_wen
  • 2016年09月29日 14:08
  • 2196

比较函数指针、函数符和lambda函数

函数指针 函数指针即函数的地址,函数的地址是存储其机器语言代码内存的开始地址。函数的地址可作为其他函数的参数。 函数符 函数符是可以以函数方式与()结合使用的任意对象。这包括函数名、指向函数的指针和...
  • u012507022
  • u012507022
  • 2016年07月18日 19:05
  • 911

面试题之指针函数与函数指针的区别

1.指针函数 先看下面的函数声明,注意,此函数有返回值,返回值为int *,即返回值是指针类型的。 [cpp] view plain copy ...
  • sum_TW
  • sum_TW
  • 2016年12月09日 16:26
  • 2575

当函数重载遇上函数指针

#include #includeusing namespace std;void func() { cout
  • maoliran
  • maoliran
  • 2016年08月08日 09:41
  • 541

C++------------typedef 函数指针类型定义

摘要bycrazyhacking:        typedef 是定义了一种“函数指针”类型,可以再声明很多变量。函数指针的定义是定义了一个变量。 int max(int x,int y){...
  • crazyhacking
  • crazyhacking
  • 2013年12月27日 11:28
  • 1571

在C和C++下声明函数指针的方式

在C的规范下,声明一个函数指针的方式如下: //comm.h #ifndef COMM_H #define COMM_H void test_print(const char*); void(*co...
  • u013600225
  • u013600225
  • 2017年04月05日 15:16
  • 538

函数指针的好处、作用

C中函数指针的作用   项目中用到了很多封装在struct中的函数指针,以前在MFC里面经常用到则个作为回调函数,还以为是微软设计的特色呢。在网上查了一下它的用法,做个总结。   1)提供调...
  • wujiangguizhen
  • wujiangguizhen
  • 2013年12月06日 00:29
  • 12179

C语言:typedef定义函数指针

在typedef的使用中,最麻烦的是指向函数的指针,如果没有下面的函数,你知道下面这个表达式的定义以及如何使用它吗? int (*s_calc_func(char op))(int, int); 如果...
  • dingyuanpu
  • dingyuanpu
  • 2010年05月09日 17:34
  • 6948

C++学习笔记之 函数重载和函数指针在一起

笔记: 当使用重载函数名对函数指针进行赋值时,根据重载规则挑选与指针参数列表一致的候选者。严格匹配候选者的函数类型与函数指针的函数类型。 int func(int x){ return x; } i...
  • patkritLee
  • patkritLee
  • 2016年02月18日 20:54
  • 742

使用函数指针列表搭建程序框架

问题描述: 如果我们需要做一个这样的程序,当用户输入"hello"时,我调用hello函数,当用户输入"hey"时,我调用hey函数,像这样的对应关系,用户可能会有数千种输入,每种输入对应一个我需要调...
  • Cashey1991
  • Cashey1991
  • 2012年12月19日 23:44
  • 2178
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:函数指针
举报原因:
原因补充:

(最多只允许输入30个字)