为什么int *func(.....);和int(*func)(....)?它和运算符 * 有关系吗?

jdgnovmf  于 2023-03-01  发布在  其他
关注(0)|答案(1)|浏览(134)

众所周知,int *func(…..);int (*func)(….);是有区别的。前者定义了一个函数,而后者定义了一个指向函数的指针。但我想知道为什么会有区别?操作符*默认情况下是附加在它前面的吗?

yc0p9oo0

yc0p9oo01#

C语法中定义的优先级顺序将后缀运算符(如++()[])绑定得比前缀运算符(如*)更强。

  • int *func(void)定义了指向int的指针(函数名为func,没有返回a的参数);反之
  • int (*func)(void)定义了名为func的变量,该变量是指向(返回int的无参数函数)的指针。

要解析C定义,可以使用螺旋规则:从符号func开始,解析后缀运算符,然后解析()内的前缀运算符,并且再次解析)之后的运算符,然后解析(之前的运算符。

相关问题