我正在讨论C运营商的关联性话题.
在那里我遇到了这个事实,函数调用操作符()
具有从左到右的关联性.但是,当表达式中出现相同优先级的多个运算符时,关联性才会发挥作用.但我找不到涉及函数调用运算符的任何示例,其中关联性起着至关重要的作用.
例如,在语句中a = f(x) + g(x);
,结果取决于评估顺序,而不取决于两个函数调用的关联性.类似地,调用f(g(x))
将g()
首先评估函数,然后是函数f()
.这里我们有一个嵌套的函数调用,并且再次关联不起任何作用.
此优先级组中的其他C运算符是数组下标[]
,postfix ++
和postfix --
.但我找不到任何涉及这些运算符组合的例子,()
其中关联性在表达式评估中起作用.
所以我的问题是函数调用的关联性是否从左到右定义影响C中的任何表达式?任何人都可以提供一个示例,其中函数调用运算符的关联性()
在表达式求值中是否重要?
Grz*_*ski 44
下面是一个示例,其中函数调用操作符的左右关联性很重要:
#include <stdio.h>
void foo(void)
{
puts("foo");
}
void (*bar(void))(void) // bar is a function that returns a pointer to a function
{
puts("bar");
return foo;
}
int main(void)
{
bar()();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
函数调用:
bar()();
Run Code Online (Sandbox Code Playgroud)
相当于:
(bar())();
Run Code Online (Sandbox Code Playgroud)
pas*_*pkT 15
除了@ GrzegorzSzpetkowski的答案,您还可以拥有以下内容:
void foo(void) { }
int main(void) {
void (*p[1])(void);
p[0] = foo;
p[0]();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这将创建一个函数指针数组,因此您可以将数组下标运算符与函数调用运算符一起使用.