You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用指向函数指针的指针(pointer-to-pointer to function)调用函数?

问题背景

首先是指针声明:

void (**Func1Ptr)() = {NULL};//pointer-to-pointer to function
void (*Func2Ptr)() = {NULL};//pointer to function

定义两个函数:

void FuncA()
{
}

void FuncB()
{
}

完成赋值操作:

  • 将Func2Ptr指向FuncA的地址:
Func2Ptr = FuncA;
  • 将Func1Ptr指向Func2Ptr(即指向指向FuncA的指针):
Func1Ptr = &Func2Ptr;

问题:如何通过Func1Ptr调用目标函数FuncA?

解决方案

可以通过以下几种合法方式调用目标函数:

  1. 显式两次解引用
    这是最直观的写法,先解引用得到函数指针,再解引用得到目标函数:
(**Func1Ptr)();
  1. 省略一次解引用
    C++语法允许调用函数指针时省略*操作符,所以可以直接对*Func1Ptr(即函数指针)进行调用:
(*Func1Ptr)();
  1. 省略所有解引用
    更进一步,由于编译器会自动处理函数指针调用时的隐式解引用,甚至可以直接调用Func1Ptr:
Func1Ptr();

原理说明

Func1Ptr是指向函数指针的指针,*Func1Ptr会得到它指向的函数指针Func2Ptr,而**Func1Ptr就对应目标函数FuncA。C++为了简化函数指针的调用,允许在调用时省略任意数量的*,因此后两种写法都是合法的,最终都会编译为调用FuncA的指令。

内容的提问来源于stack exchange,提问作者Ig_M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 18:00:57