int *func(void)
Run Code Online (Sandbox Code Playgroud)
定义一个名为func没有参数的函数,并返回一个指向整数的指针
int(*func)(void)
Run Code Online (Sandbox Code Playgroud)
定义指向没有参数的函数的指针并返回一个整数
这种差异的原因是运营商优先级.Parerenteses的优先级高于*.因此,在第一个表达式中int *func(),函数括号具有最高优先级并且首先被考虑,因此与符号关联,func因此编译器知道它func是函数的符号.因此剩下的就是回归.
在第二个例子中,int(*func)()有一组额外的括号.在我们看到的第一个括号内*func.由于括号是最高优先级(从左到右),编译器必须解释此集合的内容... *func是一个指针.好的指针指向什么?向右看,我们看到()它是一个指向函数的指针.然后向左看,看看返回类型.
希望这是有道理的:)同时尝试如何在CodeProject.com上解释复杂的C/C++声明.它谈到了一种叫做"左右规则"的东西,它是"......一个允许你解释任何声明的简单规则......".这只是页面的一半......
还可以尝试cdecl:C乱码↔英语.这是cdecl实用程序的一个很好的实现.

| 归档时间: |
|
| 查看次数: |
111 次 |
| 最近记录: |