这两个指针如何彼此不同?

我是新来C语言和一般指针。所以我对这两件事的理解是基本的。这两个指针如何彼此不同?

我一直在试图创建一个指向函数的指针,没有什么奇特的。在这样做的时候;我注意到这个说法:

int *func()
不起作用。而这一次的实际工作:

int (*func)()

是它们之间有什么区别?是因为第一条语句只是一个指向整数的指针?而另一个指针,莫名其妙地,指向一个函数?怎么会这样?

回答:

int *func(void) 

定义命名的func功能没有参数和返回一个指针的整数

int(*func)(void) 

定义一个指向不具有任何参数和返回一个整数

原因的功能对于这个区别是运算符优先级。预备队比*有更高的优先权。因此,在第一个表达式int *func()中,函数括号具有最高的优先级并被视为第一个,因此与符号func关联,因此编译器知道func是函数的符号。所以剩下的就是回报。

在第二个例子中int(*func)()还有一组额外的括号。在第一个括号内,我们看到*func。由于括号是最高优先级(从左到右),编译器必须解释此集合的内容...... *func是一个指针。确定一个指向什么?看起来不错,我们看到(),所以它是一个指向函数的指针。然后向左看看返回类型。

希望这是有道理的:)在CodeProject.com上也尝试How to interpret complex C/C++ declarations。它谈论的是“左 - 右规则”,即“......一个简单的规则,允许你解释任何声明......”。它比页面的一半多一点...

也试试cdecl: C gibberish ↔ English。这是相当不错的cdecl实用程序的实现。

以上是 这两个指针如何彼此不同? 的全部内容, 来源链接: utcz.com/qa/265126.html

回到顶部