首先学习: 指向非对象(一般的)函数/过程的函数指针 Pascal 中的过程类型与C语言中的函数指针相似,为了统一说法,以下称函数指针.函数指针的声明只需要参数列表:如果是函数,再加个返回值.例如声明一个过程类型,该类型带一个通过引用传递的整型参数: type   IntProc = procedure (var Num: Integer); 这个过程类型与任何参数完全相同的例程兼容,即用它声明的变量,可以指向任何此类函数,并通过其进行函数的调用.下面是一个兼容例程: procedure Dou…
首先学习: 指向非对象(一般的)函数/过程的函数指针 Pascal 中的过程类型与C语言中的函数指针相似,为了统一说法,以下称函数指针.函数指针的声明只需要参数列表:如果是函数,再加个返回值.例如声明一个过程类型,该类型带一个通过引用传递的整型参数: type   IntProc = procedure (var Num: Integer); 这个过程类型与任何参数完全相同的例程兼容,即用它声明的变量,可以指向任何此类函数,并通过其进行函数的调用.下面是一个兼容例程: procedure Dou…
(1)函数指针:可以指向 一类 固定形参类型和返回值类型 的函数 的指针声明:int fun(int, int)    ||    \/int (*pfun)(int, int) pfun就是函数指针(变量) 调用: d = pfun(a, b);    e = (*pfun)(a, b); #####指针函数int *fun(int, int);int *(fun(int, int));##### /*ex01.c*/#include <stdio.h> int max(int a, int…
1 引子 标准C++中没有真正的面向对象的函数指针.这一点对C++来说是不幸的,因为面向对象的指针(也叫做“闭包(closure)”或“委托(delegate)”)在一些语言中已经证明了它宝贵的价值.在Delphi (Object Pascal)中,面向对象的函数指针是Borland可视化组建库(VCL,Visual Component Library)的基础.而在目前,C#使“委托”的概念日趋流行,这也正显示出C#这种语言的成功.在很多应用程序中,“委托”简化了松耦合对象的设计模式[GoF].…
原文(作者:Don Clugston):Member Function Pointers and the Fastest Possible C++ Delegates 译文(作者:周翔): 成员函数指针与高性能的C++委托(上篇) 成员函数指针与高性能的C++委托(中篇) 成员函数指针与高性能的C++委托(下篇) 引子 标准C++中没有真正的面向对象的函数指针.这一点对C++来说是不幸的,因为面向对象的指针(也叫做“闭包(closure)”或“委托(delegate)”)在一些语言中已经证明了它…
上次看Atmel的示例工程,发现人家使用了函数指针的结构体(函数指针结构体).感叹人家的C语言功夫审核,自己费劲还是只能读懂的份.不过,函数指针确实好用.今天就试试这个超牛的东西.Now let's see how function pointers can help us. 实验前,了解下函数指针的定义方法.(来自百度百科的说明) 函数指针的声明方法为: 函数类型 (标志符指针变量名) (形参列表); 注1:"函数类型"说明函数的返回类型,"(标志符指针变量名 )"…
ref:http://bbs.csdn.net/topics/360249561 一个继承了两个虚基类又增加了自己的一个虚函数pif的类,sizeof(指向pif的指针)竟然是8(X86).我是从这里http://www.codeproject.com/KB/cpp/FastDelegate.aspx看到的. 试验代码(VS2010,Win32)    #include <iostream>#include <cstdlib> class CBase{public:    int…
转自:http://blog.sina.com.cn/s/blog_4c78b35f010008hi.html 笔者在开发某软件过程中遇到这样一个问题,前级模块传给我二进制数据,输入参数为 char* buffer 和 int length,buffer是数据的首地址,length表示这批数据的长度.数据的特点是:长度不定,类型不定,由第一个字节(buffer[0])标识该数据的类型,共有256(2的8次方)种可能性.我的任务是必须对每一种可能出现的数据类型都要作处理,并且我的模块包含若干个函数…
1. 数组名 C语言中的数组名是一个特殊的存在, 从本质上来讲, 数组名是一个地址, 我们可以打印一个指针的值,和打印一个数组的值来观察出这个本质: int nArray[10] ={ 0 }; int *p = nArray; printf("nArray:%p , p = %p\n", nArray,p); 打印出来的将会是两个相同的值.但是数组名并不意味着和指针完全相同, 数组名还有另一个本质,数组名是一个常量,不允许被赋值. 但指针允许被赋值,例如: p = nArray; n…
这两天在研究C/C++的函数指针,找到一篇讲解比较详细的博客,内容有点多,但是讲解得比较详细,适合初学者.特转之: 1.     无处不见的函数指针 使用函数指针可以设计出更优雅的程序,比如设计一个集群的通信框架的底层通信系统:首先将要每个消息的对应处理函数的指针保存映射表中(使用STL的map,键是消息的标志,值是对应的函数指针),然后启动一个线程在结点上的某个端口侦听,收到消息后,根据消息的编号,从映射表中找到对应的函数入口,将消息体数据作为参数传给相应的函数.我曾看过lam-mpi在启动集…
C/C++中的函数指针 一.引子 今天无聊刷了leetcode上的一道题,如下: Median is the middle value in an ordered integer list. If the size of the list is even, there is no middle value. So the median is the mean of the two middle value. Examples: [2,3,4] , the median is 3 [2,3], t…
一.背景 首先看下如下代码,这个定义是放在头文件的,在程序中tCdrvCallbackFkt也定义了另一个变量,而且括号后面还跟定义了几个变量,不理解这个定义. typedef void (PUBLIC *tCdrvCallbackFkt) (tCDrv_Handle CdrvHandle_p, tCDrv_Event Event_p, LPARAM pArg_p, DWORD dwParam_p); 最近在跟别人的代码,要更改别人的代码,所以必须是理解每一行代码的意义和如何使用,遇到关于函数指…
什么是函数指针 函数指针是指向函数的指针变量.也就是说,它是一个指针变量,而且该指针指向一个函数. 对于指针变量来说,它的值是它指向的变量的地址.举个例子:指针变量pi是指向一个整型变量i的指针,则变量i的地址 &i 就是指针变量pi的值.也就是说整型变量指针指向一个整型变量,而整型变量指针的值就是它所指的整型变量的地址.与其它类型指针变量一样,函数指针变量的值就是它指向的函数的地址. 那么什么是函数的地址呢? 我们首先来看函数调用是怎么回事.在程序运行时,一个函数占用一段连续的内存.当调用一个…
类成员函数指针 类成员函数指针(member function pointer),是C++语言的一类指针数据类型,用于存储一个指定类具有给定的形参列表与返回值类型的成员函数的访问信息. 目录 1 语法 2 语义 3 类成员函数指针的用途 4 例子 4.1 未知继承的成员函数指针例子 5 参考文献 语法 使用::*声明一个成员指针类型,或者定义一个成员指针变量.使用.*或者->*调用类成员函数指针所指向的函数,这时必须绑定(binding)于成员指针所属类的一个实例的地址.例如: struct X…
函数指针 函数指针是指向函数的指针变量. 通常我们说的指针变量是指向一个整型.字符型或数组等变量,而函数指针是指向函数. 函数指针可以像一般函数一样,用于调用函数.传递参数. 函数指针变量的声明: // 声明一个指向同样参数.返回值的函数指针类型 typedef int (*fun_ptr)(int,int); 以下实例声明了函数指针变量 p,指向函数 max: #include <stdio.h> int max(int x, int y) { return x > y ? x : y…
注意,对一般c++ 98标准编译器而言,容器泛型模板是不支持直接存放函数指针的.需要typedef将函数指针重命名. 比如,一个void返回值参数也为void的函数指针,需要 typedef void(*test)(void); 这样,test就可以当做函数指针模板类型添加到容器当中了. map<int, test> testMap; pair<,displayone); 以下示例代码简单的示范一下: #include<iostream> #include<string…
本次主要学习和理解函数指针 1.函数指针 void printValue(int number) { printf("number = %d\n", number); } int main(int argc, const char * argv[]) { void (*p1)(int) = NULL; p1 = printValue; p1(); } 1> 定义 代码第5行 函数类型:int (int, int) 函数指针的类型:int (*p)(int, int) p是函数指针…
1.函数指针的定义 顾名思义,函数指针就是函数的指针.它是一个指针,指向一个函数.看例子: A) char * (*fun1)(char * p1,char * p2); B) char * *fun2(char * p1,char * p2); C) char * fun3(char * p1,char * p2); 看看上面三个表达式分别是什么意思? C)这很容易,fun3是函数名,p1,p2是参数,其类型为char *型,函数的返回值为char *类型.B) 也很简单,与C)表达式相比,唯…
函数重载 函数重载是指在同一作用域内,可以有一组具有相同函数名,不同参数列表的函数,这组函数被称为重载函数.重载函数通常用来命名一组功能相似的函数,这样做减少了函数名的数量,避免了名字空间的污染,对于程序的可读性有很大的好处. 试想如果没有函数重载机制,如在C中,你必须要这样去做:为这个print函数取不同的名字,如print_int.print_string.这里还只是两个的情况,如果是很多个的话,就需要为实现同一个功能的函数取很多个名字,如加入打印long型.char*.各种类型的数组等等.…
  这篇文章简单的叙述一下函数指针在结构体中的应用,为后面的一系列文章打下基础 本文地址:http://www.cnblogs.com/archimedes/p/function-pointer-in-c-struct.html,转载请注明源地址. 引言 指针是C语言的重要组成部分, 于是深入理解指针并且高效地使用指针可以使程序员写出更加老练的程序.我们要记住指针是一个指向内存地址的变量.指针可以引用如int.char……常见的数据类型,例如: int * intptr; // 声明一个指向整型…
一.基础研究 这里研究的内容是函数指针,需要我们在研究后构造程序来描述函数指针数组的用法和向函数传函数指针的方法. 指针有很多种:整型指针.结构体指针.数组指针等等,它们的本质是它们的值都是一个地址,只不过整形指针的值是一个int型数据的地址,结构体指针的值是一个结构体变量的地址,而这里的函数指针指向的不是一个固定类型数据的地址了,而是一个函数的入口地址. 我们知道int a(char,char):是返回值为int类型,参数为char.char类型的函数a,而书上说int (*a)(char,c…
二.通常的函数调用 一个通常的函数调用的例子:/* 自行包含头文件 */void MyFun(int x); /* 此处的声明也可写成:void MyFun(int) */int main(int argc, char* argv[]){ MyFun(10); /* 这里是调用MyFun(10) 函数 */ return(0);}void MyFun(int x) /* 这里定义一个MyFun函数 */{ printf("%d\n",x);}这个MyFun函数是一个无返回值的函数,它并…
首先来介绍下函数指针: 函数指针是指向函数的指针变量,即本质是一个指针变量. int (*f) (int x); /* 声明一个函数指针 */ f=func; /* 将func函数的首地址赋给指针f */ 使用的时候可以直接通过(*f)(x)这样的形式.网上有很多的函数指针资料,就不多说了. 当我们在函数指针前加上typedef,就变成什么样了呢? 比如typedef  INT32  (*WNDPROC)(HWND, INT32, WPARAM, LPARAM); 这条语句的意思是定义了一个类型…
一.通常的函数调用 一个通常的函数调用的例子: /* 自行包含头文件 */ void MyFun(int x); /* 此处的声明也可写成:void MyFun(int) */ int main(int argc, char* argv[]) { MyFun(10); /* 这里是调用MyFun(10) 函数 */ return(0); } void MyFun(int x) /* 这里定义一个MyFun函数 */ { printf("%d\n",x); } 这个MyFun函数是一个无…
C++要是不常用,相信过四天你的指针函数与函数指针的概念就该忘个精光. 其实只要记住谁在后面谁就是哪个本质. 先了解下指针数组与数组指针吧 数组指针 就是指向数组的指针,它表示的是一个指针,它指向的是一个数组,它的重点是指针,如,int(*pa)[8]声明了一个指针,该指针指向了一个有8个int型元素的数组 指针数组 就是指针的数组,表示的是一个数组,它包含的元素是指针,它的重点是数组.如, int* pa[8]声明了一个数组,该数组的每一个元素都是int型的指针 解了指针与数组的关系后,我们迁…
问题: 在刚接触typedef void (*pfun)(void) 这个结构的时候,存在疑惑,为什么typedef后只有一"块"东西,而不是两"块"东西呢?那是谁"替代"了谁啊?我总结了一下,一方面是对typedef的概念不清晰,另一方面受了#define的影响,犯了定向思维的错误. 概念理解: -typedef 只对已有的类型进行别名定义,不产生新的类型: -# define只是在预处理过程对代码进行简单的替换. 清晰了解两个概念后,发现它们…
首先介绍大家比较熟悉的typedef int i;//定义一个整型变量i typedef myInt int: myInt j;//定义一个整型变量j 上面介绍得是我们常用的比较简单的typedef的用法,下面首先介绍一下函数指针. 函数指针的形式: 形式1:返回类型(*函数名)(参数表)  #include <iostream> using namespace std; //定义一个函数指针pFUN,它指向一个返回类型为char,有一个整型的参数的函数 char (*pFun)(int);…
转自:http://blog.csdn.net/iamshaofa/article/details/17614615 C函数指针 int numAdd(int a, int b) { return a+b; } int numMinus(int a, int b) { return a-b; } 直接定义一个函数指针 int (*funcTwo)(int, int) = numAdd; 先typedef后使用 typedef int (*PtrFuncTwo)(int, int); int al…
函数指针 函数指针是指向函数的指针变量. 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数.这正如用指针变量可指向整型变量.字符型.数组一样,这里是指向函数.如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址.有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是一致的.函数指针有两个用途:调用函数和做函数的参数. 1,方法: 函数指针的声明方法为:函数类型 (标志符指针变量名) (形参列表); 注…
转自:http://blog.csdn.net/future200x/article/details/5350134 一个函数在编译时被分配一个入口地址,将这个入口地址称为函数的指针,可以用一个指针变量指向该函数指针,然后通过该变量来调用函数. 有关说明: 1.  函数指针的声明格式: 函数返回值类型(*指针变量名)(参数类型列表) 或者是: typedef 函数返回值类型 (*指针变量名)(参数类型列表) 2.一个函数指针只能指向一种类型的函数,即具有相同的返回值和相同的参数的函数 3.关于函…