-2

有人可以给我a[++b] 和 ++a[b] 的优先级抽象语法树,以便我可以更好地理解我在对运算符进行评估时遇到困难..我得到表达式评估什么都没有与操作员的评估顺序有关..!! 在这种情况下,在 array[expr1] expr1( sub script expression) 中的任何运算符 expr1 应该首先被评估?我只是说在 a[++b]...[] 中的优先级高于 ++(前缀),所以我查看表达式 a[++b] 并认为b 涉及两个运算符,其中较高的省 [] 应该首先被评估。但有人告诉我哪里错了?**

 int main(){
     int a[4]={1,2,3,4};, b=1;
     printf("%d ",a[b++]);
     b=1;
      printf("%d",++a[b]);
           }

**

4

3 回答 3

1

评估参数列表时没有序列点。因此,您唯一可以保证的是,在调用 printf 之前的某个时刻,b它将作为后增量的副作用而递增。这根本不是优先顺序问题。

该答案适用于您的原始代码,

printf("%d ",a[b++], ++a[b]);

我看到你现在已经完全改变了。

于 2013-07-02T12:42:46.570 回答
0

在您的示例a[++b]中,b不是[];的操作数 []有两个操作数,一个在前面,[一个在[and之间]

于 2013-07-02T12:53:14.713 回答
0

首先请尝试理解 的含义++a++意味着a=a+1a++现在和++a(之前和之后)之间的区别:

a++将在语句完成后执行,即(在下一个;或通常是行之后) where++a将立即执行。

现在说到你的观点,a[b++] ++正在处理数组索引b,其中 ina[b]++正在处理 bth 值。a[++b]++a[b]在另一个计算之前立即增加值。

于 2013-07-02T13:17:45.340 回答