函数指针

原创 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;
}


结果 :




相关文章推荐

C语言函数指针

  • 2012年10月07日 13:19
  • 15KB
  • 下载

C语言函数指针

  • 2013年07月14日 23:23
  • 25KB
  • 下载

C++那些细节--函数指针

关于函数指针的一些问题

函数指针定义

  • 2012年03月04日 09:45
  • 39KB
  • 下载

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

问题描述: 如果我们需要做一个这样的程序,当用户输入"hello"时,我调用hello函数,当用户输入"hey"时,我调用hey函数,像这样的对应关系,用户可能会有数千种输入,每种输入对应一个我需要调...

函数指针申请与使用

  • 2013年06月04日 23:32
  • 212B
  • 下载

C语言函数指针.doc

  • 2015年08月04日 11:36
  • 35KB
  • 下载

typedef 函数指针的用法

typedef 函数指针的用法 在网上搜索函数指针,看到一个例子。开始没看懂,想放弃,可是转念一想,这个用法迟早要弄懂的,现在多花点时间看懂它,好过以后碰到了要再花一倍时间来弄懂它。...
  • fanrwx
  • fanrwx
  • 2017年03月22日 10:14
  • 167

利用函数指针实现多分支选项

  • 2010年11月06日 21:35
  • 26KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:函数指针
举报原因:
原因补充:

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