语法 - 可能的函数指针

Mak*_*ebi 12 c++

一行代码让我困惑,我无法解决它.它可以是一个函数地址的转换并将它分配给一个函数指针,但是'address'不应该存在.还是我完全脱离背景?

int32_t (*const my_func)(uint32_t address) = (int32_t (*)(uint32_t address)) nvm_addr;
Run Code Online (Sandbox Code Playgroud)

Tar*_*ama 15

int32_t (*const my_func)(uint32_t address)
Run Code Online (Sandbox Code Playgroud)

一个变量调用my_func,它将一个const指针存储到一个函数中,该函数接受uint32_t并返回一个int32_t.参数名称是可选的,它只是用于了解该参数的语义.

(int32_t (*)(uint32_t address)) nvm_addr
Run Code Online (Sandbox Code Playgroud)

这会转换nvm_addr为指向与...相同类型的函数的指针my_func.

总的来说,这只是存储函数指针的一种相当冗长的方式nvm_addr.


Bas*_*tch 7

我经常有typedef这样的功能签名:

 // signature of function
 typedef int32_t my_sigT(uint32_t arg);
Run Code Online (Sandbox Code Playgroud)

typedef我经常命名正式参数(仅为了可读性).

然后声明一个指向这些函数的常量指针

 const my_sigT* my_func = (my_sigT*) nvm_addr;
Run Code Online (Sandbox Code Playgroud)

我发现在C和C++中这样做更具可读性......

在C++ 11,可以使用std::function<int32_t(uint32_t)>闭包(而不是原始函数指针) auto.

  • 有一篇很好的文章说明为什么你应该[几乎总是使用`auto`](http://herbsutter.com/2013/08/12/gotw-94-solution-aaa-style-almost-always-auto/).Lambdas是何时使用`auto`的主要例子. (2认同)