我是 C 语言和一般指针的新手。所以我对这两件事的理解是基本的。
我一直在尝试创建一个包含函数指针的结构,没什么特别的。这样做的同时;我注意到这个声明:
int *func()
不起作用。虽然这个确实有效:
int (*func)()
它们有什么区别?是不是因为第一条语句只是一个指向整数的指针。而另一个指针,不知何故,指向一个函数?怎么会这样?
最佳答案
int *func(void)
定义一个名为 func
的函数,它没有参数并返回一个指向整数的指针
int(*func)(void)
定义一个指向没有参数并返回整数的函数的指针
造成这种差异的原因是运算符优先级。括号的优先级高于 *
。因此在第一个表达式 int *func()
中,函数括号具有最高的优先级并被首先考虑,因此与符号 func
相关联,以便编译器知道 func
是函数的符号。因此剩下的就是返回。
在第二个实例 int(*func)()
中有一组额外的括号。在第一个括号内,我们看到了 *func
。由于括号是最高优先级(从左到右),编译器必须解释此集合的内容... *func
是一个指针。好的,指向什么?向右看,我们看到 ()
所以它是一个指向函数的指针。然后向左看返回类型。
希望这是有道理的 :) 也试试 How to interpret complex C/C++ declarations在 CodeProject.com 上。它谈到了一种叫做“左右规则”的东西,它是“......一个允许你解释任何声明......的简单规则......”。这是页面的一半多一点...
也试试 cdecl: C gibberish ↔ English .这是 cdecl
实用程序的一个很好的实现。
关于c - 这两个指针有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17524829/