可以有人给我优先抽象语法树[++ b]和++ a [b] ,这样我就可以更好地理解我的评估顺序有困难operator..i得到表达式求值与运算符的求值顺序无关。!! 在这种情况下,在数组[expr1] expr1(子脚本表达式)中,expr1中的任何运算符都应该是首先评估?我只是说在[++ b]中... []的优先级高于++(前缀)所以我看一下表达式[++ b]并认为 b涉及两个运算符哪个更高的预先。应首先评估[] 。 但有人告诉我我哪里错了? **
int main(){
int a[4]={1,2,3,4};, b=1;
printf("%d ",a[b++]);
b=1;
printf("%d",++a[b]);
}
**
答案 0 :(得分:1)
评估参数列表时没有序列点。所以你唯一可以保证的是,在调用printf之前的某个时刻,b
将作为后增量的副作用递增。这根本不是优先顺序。
该答案适用于原始代码,
printf("%d ",a[b++], ++a[b]);
我发现你现在已经彻底改变了。
答案 1 :(得分:0)
在您的示例a[++b]
中,b
不是[]
的操作数; []
有两个操作数,一个位于[
前面,另一个位于[
和]
之间。
答案 2 :(得分:0)
首先,请尝试理解++
的含义。 a++
表示a=a+1
。现在a++
和++a
之间的差异(之前和之后):
a++
将在声明完成后执行,即(在下一个之后; 或通常行)++a
将立即执行。
现在,a[b++]
++
正在研究数组索引b
,其中a[b]++
正在使用bth值。 a[++b]
和++a[b]
会在另一次计算之前立即增加该值。