我一直在C++中使用函数指针,我一直声明它们为void (*function)(void)
。这是我最初在教程和how tutorials still teach it中看到的。今天替代函数语法/函数原型?
但是,我正在读维基百科文章关于高阶函数时,我使用的是备用的语法,其中*
和包围该函数指针的变量/类型名称的括号不存在发现了一个例子,如图here。
我测试过,看表格void function(void)
是否适用于变量,参数和typedefs。它不适用于变量,但它适用于参数和typedef,没有明显的变化,实际上可以与标准函数指针语法互换。
我挖了一点,发现an SO question似乎暗示它是'函数原型'而不是函数指针的语法。然而wikipedia's explanation of function prototypes听起来很像只是预先声明的函数。
对于我的问题的广泛范围,我很抱歉,但是这个语法究竟是什么?
- 它定义了“函数原型”还是函数指针?
- 如果它是一个函数原型,函数指针和功能 原型相同还是它们只是表现相同?
- 如果它不是一个函数原型那是否意味着'函数原型' 只是函数的预先声明?
- 如果此语法与标准函数指针 的语法等效,为什么更常用的教学形式是更详细的(并且可以说难以阅读)语法 ?
- 语法是否产生不同的结果/有不同的含义 和我有点不知道?
在移动所以不打算写一个完整的答案,但你展示语法仅在typedef工作。这一切都是一团糟! –
你经常看到函数指针的地方是一个参数('void(* param)()')。这是写'void param()'的一种情况,它的作用与'int [N]'相同,因为函数参数实际上是'int *',但在其他地方不同。 – chris
@chris我只是双重检查,似乎我忘了测试变量的情况。当我开始进行更多的研究并编写这个问题时,我写了一半的内容,所以我忘了我没有真正按下编译按钮。我已经在我的问题中解决了这个错误。 – Pharap