语法 - 可能的函数指针

时间:2015-07-17 13:30:37

标签: c++

一行代码让我困惑,我无法解决它。它可以是一个函数地址的转换并将它分配给一个函数指针,但是然后“地址”就可以了。不应该在那里。还是我完全脱离了背景?

int32_t (*const my_func)(uint32_t address) = (int32_t (*)(uint32_t address)) nvm_addr;

3 个答案:

答案 0 :(得分:15)

int32_t (*const my_func)(uint32_t address)

一个名为my_func的变量,它存储一个指向函数的const指针,该函数采用uint32_t并返回int32_t。参数名称是可选的,它只是为了说明该参数的语义。

(int32_t (*)(uint32_t address)) nvm_addr

nvm_addr强制转换为指向与my_func相同类型的函数的指针。

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

答案 1 :(得分:7)

我经常有https://github.com/apache/cordova-plugin-file-transfer fileTransfer.download( uri, fileURL, function(entry) { console.log("download complete: " + entry.toURL()); }, function(error) { console.log("download error source " + error.source); console.log("download error target " + error.target); console.log("upload error code" + error.code); } ); 这样的功能签名:

typedef

// signature of function typedef int32_t my_sigT(uint32_t arg); 我经常命名形式论证(仅为了可读性)。

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

typedef

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

在C ++ 11中,您可以将 const my_sigT* my_func = (my_sigT*) nvm_addr; 用于closures(非原始函数指针)with std::function<int32_t(uint32_t)>

答案 2 :(得分:4)

这是function pointer名为my_func的声明,该{{3}}正在使用nvm_addr强制转换为my_func

类型