函数指针与回调函数-创新互联
一、函数指针
创新互联公司是一家专业提供永嘉企业网站建设,专注与成都网站建设、网站建设、HTML5、小程序制作等业务。10年已为永嘉众多企业、政府机构等服务。创新互联专业网站建设公司优惠进行中。1、 函数指针就是一个指针变量,用来指向函数地址。正在运行的程序(进程)在内存中占据一定的空间。进程包括编译好的程序代码和需要使用的变量。因此,程序代码中的函数就是一些字符域,要得到一个函数地址,也就是得到这些字符域的起始地址。
2、 函数指针的三种形式:
指向普通C函数的函数指针 --- C语言中的函数指针
指向C++类静态成员函数的函数指针 --- C++
指向C++类非静态成员函数的函数指针 --- C++
函数指针的本质自然也就是函数地址。 类成员函数的地址表示和普通C函数的地址是不一样的。要表示一个类例的成员函数,光有函数地址还不够,因为每个类实例拥有一个非静态成员函数,而每个实例在内存中都要占据一定的空间,所以, 非静态类成员函数的地址由两部分组成,一 个是 实例地址,一个是 函数地址。实例地址通过隐含的this指针来传递。函数地址就是函数在实例所占内存中的偏移地址,只不过这个地址通过函数名取得,并不需要关心其偏移具体的多少.
静态成员函数和 非静态成员函数的区别:静态成员函数并不是第个实例都拥有一个这样的函数。所以,静态成员函数的地址并不需要实例地址,也就是说,没有this指针。其地址实质上和普通的C函数地址是一样的,只不过在定义函数指针时会有所不同。
第一种和第三种的区别,两者的区别:要得到一个类实例的成员函数指向非静态成员函数的函数指针需要一个隐含参数:指向类实例的this指针。而指向普通C函数的函数指针只需要得到函数地址既可。 这两种类型的函数指针是不兼容的(不可互相赋值)。
3、函数指针的定义:
指向普通函数的指针:
int (*pfun)(float, char, char) = NULL; // C
指向类成员函数的指针:
int (myclass::*pmember)(float, char, char) = NULL; // C++
int (myclass::*pconstmember)(float, char,char) const = NULL; // C++
todo : 指向静态成员函数的函数指针定义
二、回调函数
1、回调函数就是一个通过函数指针调用的函数。如果把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。
2、使用回调函数,需要:
声明
定义
设置触发条件:在你的函数种把你的回调函数名称转化为地址作为一个参数,以便于系统调用。
注:声明和定义时,回调函数由系统调用。
3、回调函数:一个程序员不能显示调用的函数,通过将回调函数的地址传给调用者从而实现调用。通过一个统一接口实现不同的内容。
创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。
当前名称:函数指针与回调函数-创新互联
网页网址:http://ybzwz.com/article/doipgj.html