有人可以解决以下表达式的优先级吗?

时间:2013-07-02 12:32:22

标签: c operator-precedence

可以有人给我优先抽象语法树[++ 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]);
           }

**

3 个答案:

答案 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]会在另一次计算之前立即增加该值。