这两个指针是如何相互不同的?

Abd*_*ziz 2 c pointers integer function

我是C语言和一般指针的新手.所以我对这两件事的理解是基本的.

我一直在尝试创建一个包含函数指针的结构,没什么特别的.这样做; 我注意到这句话:

int *func()
不起作用.而这一个实际上有效:

int (*func)()

他们之间有什么区别?是因为第一个语句只是一个指向整数的指针.而另一个指针,不知何故,指向一个函数?怎么会这样?

Jim*_*mbo 9

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实用程序的一个很好的实现.

在此输入图像描述

  • 在C中不带参数的函数应该真正声明为`(void)`,而不仅仅是`()`. (4认同)