为什么在乘法后执行增量运算?

时间:2015-10-03 15:43:41

标签: c

为什么在乘法后评估此表达式增量? 它具有更高的优先级。

y = x * z ++;

编辑: 另一个例子

int i[] = {3, 5};
int *p = i;
int j = --*p++;

相当于

int j = postincrement(--*p);

4 个答案:

答案 0 :(得分:2)

z++或多或少与:

相同
int postincrement(int *z) {
    int temp = *z;
    *z++;
    return temp;
}

所以你的代码或多或少等同于:

y = x * z;
z = z + 1;

答案 1 :(得分:1)

它是一个后缀运算符。首先评估结果,然后z递增。所以基本上表达式如下:

y = x * postincrement(z); // where postincrement was defined in Bill's answer

其中postincrementz的“旧”值作为临时值返回,然后z递增,但递增的z不会进入表达式。< / p>

答案 2 :(得分:0)

++增量运算符。 ++在其操作数上加1。

如果您在变量++之前使用++x,则会将其称为pre-increment运算符。 ++x递增x并计算x的新值。

如果您在变量++之后使用x++,则称其为post-increment运算符。 x++计算x的旧值,并递增x。

y = x * z++;  

相同
y = x * z;
z = z + 1;

编辑:

  

为什么在乘法后执行增量运算?

没有。 z的值在乘法之前递增,但由于后增量运算符,它在表达式中求值为旧值。 正如你所说++具有最高优先级而不是*所以++操作首先完成而不是乘法,但是z ++的值计算为其旧值而不是递增值。

答案 3 :(得分:0)

更多细节

“为什么在乘法后执行增量运算?”是一个错误的前提。

赋值给乘法的第二个值是z++的“返回值”结果。 z++的“返回值”是z原始值。 z++会导致z递增。如果此增量在乘法之前或之后发生,则无关,因为乘积为x且原始值为z

伪代码:两者都是可能的。

 copy z to reg
 inc z
 mult x*reg -> y

 mult x*z -> y
 inc z