为什么在乘法后评估此表达式增量? 它具有更高的优先级。
y = x * z ++;
编辑: 另一个例子
int i[] = {3, 5};
int *p = i;
int j = --*p++;
相当于
int j = postincrement(--*p);
答案 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
其中postincrement
将z
的“旧”值作为临时值返回,然后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