当前位置:网站首页 > 技术博客 > 正文

c++函数指针与指针函数




函数存放在内存的代码区域内,它们同样有地址.如果我们有一个 的函数,那么,它的地址就是函数的名字,这一点如同数组一样,数组的名字就是数组的起始地址。

data_types (*func_pointer)( data_types arg1, data_types arg2, ...,data_types argn);

例如:

int (*fp)(int a); // 这里就定义了一个指向函数(这个函数参数仅仅为一个 int 类型,函数返回值是 int 类型)的指针 fp。

注意:函数指针所指向的函数一定要保持函数的返回值类型,函数参数个数,类型一致。

执行以上代码,输出结果为:

10

定义:类成员函数指针(member function pointer),是 C++ 语言的一类指针数据类型,用于存储一个指定类具有给定的形参列表与返回值类型的成员函数的访问信息。

基本上要注意的有两点:

  • 1、函数指针赋值要使用
  • 2、使用 (实例对象)或者 (实例对象指针)调用类成员函数指针所指向的函数

下面看两个例子:

对于 nonstatic member function (非静态成员函数)取地址,获得该函数在内存中的实际地址

对于 virtual function(虚函数), 其地址在编译时期是未知的,所以对于 virtual member function(虚成员函数)取其地址,所能获得的只是一个索引值

执行以上代码,输出结果为:

 A::set(): 0x8048a38 B::print(): 0x1 B::print(): 0x5 A: 0 A: 10 A: 100 A: 1000 A: 10000 


类成员函数指针与普通函数指针不是一码事。前者要用 与 - 运算符来使用,而后者可以用 运算符(称为"解引用"dereference,或称"间址"indirection)。

普通函数指针实际上保存的是函数体的开始地址,因此也称"代码指针",以区别于 C/C++ 最常用的数据指针。

而类成员函数指针就不仅仅是类成员函数的内存起始地址,还需要能解决因为 C++ 的多重继承、虚继承而带来的类实例地址的调整问题,所以类成员函数指针在调用的时候一定要传入类实例对象。

原文地址:https://blog.csdn.net/crayondeng/article/details/

  • 上一篇: 字典树详解
  • 下一篇: azw4 转换器
  • 版权声明


    相关文章:

  • 字典树详解2025-04-28 19:30:04
  • ok ok2025-04-28 19:30:04
  • 程序员接私活收费标准2025-04-28 19:30:04
  • 客户端性能测试工具2025-04-28 19:30:04
  • webshell一个多少钱2025-04-28 19:30:04
  • azw4 转换器2025-04-28 19:30:04
  • c++ runtime error2025-04-28 19:30:04
  • 权限控制技术2025-04-28 19:30:04
  • adb工具安装2025-04-28 19:30:04
  • csrf攻击防范2025-04-28 19:30:04