众所周知,int *func(…..);和int (*func)(….);是有区别的。前者定义了一个函数,而后者定义了一个指向函数的指针。但我想知道为什么会有区别?操作符*默认情况下是附加在它前面的吗?
int *func(…..);
int (*func)(….);
*
yc0p9oo01#
C语法中定义的优先级顺序将后缀运算符(如++、()和[])绑定得比前缀运算符(如*)更强。
++
()
[]
int *func(void)
int
func
int (*func)(void)
要解析C定义,可以使用螺旋规则:从符号func开始,解析后缀运算符,然后解析()内的前缀运算符,并且再次解析)之后的运算符,然后解析(之前的运算符。
)
(
1条答案
按热度按时间yc0p9oo01#
C语法中定义的优先级顺序将后缀运算符(如
++
、()
和[]
)绑定得比前缀运算符(如*
)更强。int *func(void)
定义了指向int
的指针(函数名为func
,没有返回a的参数);反之int (*func)(void)
定义了名为func
的变量,该变量是指向(返回int
的无参数函数)的指针。要解析C定义,可以使用螺旋规则:从符号
func
开始,解析后缀运算符,然后解析()
内的前缀运算符,并且再次解析)
之后的运算符,然后解析(
之前的运算符。