函数指针浅谈

原创 2003年05月11日 11:31:00

/*
 看到 ilovenet大作“有没有试过将函数作为参数(parameter)来传递?”
 (http://www.csdn.net/develop/Read_Article.asp?Id=18162).
 颇有感触,下面是我关于“函数指针”和作为参数传递的实践内容,
 不多言,大家亲自体会一下即知。
 本人水平有限,欢迎指正(绝不是谦虚^_^)。
 如有错误,mailto:leepyzh@21cn.com
*/

//程序如下
//Test on windows 2000 + VC 6.0
//
////====================================////

#include "stdafx.h"

typedef bool (*compfunc)(int ,int );
//函数的指针
//compfunc的意思就是:
/*
 指向返回值是bool的函数指针
 compfunc a ====== bool (*a)(int ,int)
*/

//两个简单的函数,执行着相反的功能
bool littletobig(int a,int b) {return b<a;}
bool bigtolittle(int a,int b) {return b>a;}

void exchange(int &a, int &b){int temp;temp = a,a = b,b = temp;}

//函数的指针为参数
//任意一个数组排序了
//当传入littletobig,从小到大排序,反之bigtolittle,从大到小

//两种函数声明方法一样。
#if 0
void sort(int array[],const int size,bool (*comp)(int,int))
#else
void sort(int array[],const int size,compfunc comp)
#endif
{
 int i = 0;
 for(;i < size-1; i++){
  if(comp(array[i],array[i+1]))
  {
   exchange(array[i],array[i+1]);
   sort(array, i+1 ,comp); //递归排序
  }
 }
}

int main(int argc, char* argv[])
{
 int arr[] = {3,4,2,1,-1,999,234,34,56,-2,-2};
 //函数指针声明,一下四种情况完全相同//

////==================================================////
 compfunc up = littletobig,down = bigtolittle; 
 sort(arr,sizeof(arr)/sizeof(int),up);
 sort(arr,sizeof(arr)/sizeof(int),down);
////==================================================////
 bool (*up2)(int ,int) = littletobig;
 bool (*down2)(int ,int); down2= bigtolittle;
 sort(arr,sizeof(arr)/sizeof(int),up2);
 sort(arr,sizeof(arr)/sizeof(int),down2);

////=================================================////
 compfunc funcarray[2] = {littletobig,bigtolittle};
 sort(arr,sizeof(arr)/sizeof(int),funcarray[0]);
 sort(arr,sizeof(arr)/sizeof(int),funcarray[1]);

////=================================================////
 bool (* funcarray2[2])(int,int) = {littletobig};
 funcarray2[1] = bigtolittle;
 sort(arr,sizeof(arr)/sizeof(int),funcarray[0]);
 sort(arr,sizeof(arr)/sizeof(int),funcarray[1]);
////=================================================////

 return 0;
}

//
//
//Reference to http://www.csdn.net/develop/Read_Article.asp?Id=18162.
//
//

浅谈函数指针

函数指针的概念,在潭浩强先生的C语言程序设计这本经典的教程中提及过,在大多数情况下我们使用不到,也忽略了它的存在。函数名实际上也是一种指针,指向函数的入口地址,但它又不同于普通的如int*、doubl...
  • Hackbuteer1
  • Hackbuteer1
  • 2011年10月18日 11:43
  • 4611

浅谈====函数指针

1、函数指针及应用 我们先来看一下以下 的声明: int f(int); int  (*pf)(int)=&f;//&操作符可选;因为函数名被使用时总是由编译器把它 转换为函数指针; int...
  • vevenlcf
  • vevenlcf
  • 2013年08月28日 20:57
  • 684

函数指针浅谈

1. 基本概念首先,应该明确: 程序运行期间,每个函数都会占用一段连续的内存空间。  函数名就是该函数所占内存区域的起始地址(也 称“入口地址”)  将函数的入口地址赋给一个指针变量,使该指 针变...
  • sinat_21595363
  • sinat_21595363
  • 2016年05月15日 20:59
  • 217

函数指针与回调函数详解

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

浅谈static与函数指针

Static与函数指针 所谓函数指针就是一个指向函数的指针,也就是说我们定义一个函数指针量后,这个变量所在的空间要保存一个函数的地址。那么函数指针除了作为回调函数的传参之外还有什么作用呢?这里我们就结...
  • hostfj
  • hostfj
  • 2012年05月14日 09:02
  • 469

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

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

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

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

C语言:typedef定义函数指针

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

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

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

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

笔记: 当使用重载函数名对函数指针进行赋值时,根据重载规则挑选与指针参数列表一致的候选者。严格匹配候选者的函数类型与函数指针的函数类型。 int func(int x){ return x; } i...
  • patkritLee
  • patkritLee
  • 2016年02月18日 20:54
  • 751
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:函数指针浅谈
举报原因:
原因补充:

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