-1
#include <stdio.h>

int main()
{
  int x = 4, y, z;
  y = --x;
  z = x--;
  printf("%d %d %d", x, y, z);
}

输出:2 3 3

谁能解释一下?
什么i =+ j意思(假设i = 1j = 2)?

4

12 回答 12

9

y = --x表示“将 x 减一,然后将结果存储在 y 中”

z = x--表示“保存 x 的温度。将 x 减一。将温度值存储在 z 中”

因此:

  • x 从 4 开始。
  • 它减少了 1(到 3)。3 存储在 y 中。
  • x 被保存到一个临时文件中。x 再次减小(到 2)。然后将 temp (3) 存储在 z 中。
  • y 和 z 打印为 3,x 打印为 2。
于 2010-10-08T13:57:18.377 回答
6

后缀递减运算符 (x--) 返回变量递减之前的值。

  • x = 2,因为您已将其减少了两次。
  • y = 3,因为在 x从 4 递减,您已将其分配给 x 的值
  • z = 3,因为在 x从 3 递减之前,您已将其分配给 x 的值 。
于 2010-10-08T13:56:28.647 回答
3

您必须了解后减量和预减量运算符的概念。

两者都会递减您的变量,但其中之一将返回原始值 ( x--),其中之一将返回递减后的值 ( --x)。

于 2010-10-08T13:56:44.840 回答
3

简单解释:

--x 或 ++x :值将在之后修改。

x-- 或 x++:值将在之前修改

详细解释:

--x or ++x : pre-decrement/increment:会先做递减或递增的操作,然后赋值x。

x-- 或 x++ : post:decrement/increment : 将首先分配 x 的值,然后执行递减或递增操作。

让我们以更好的格式编写您的代码,并逐步检查您的代码并对其进行注释,以直观地向您展示发生了什么:

main() {
    //We declare the variables x, y and z, only x is given a value of 4.
    int x=4,y,z;

    //--x will decrement var x by 1 first THEN it will assign the value of x to y.
    //so: x = 3, y = 3 and z = nothing yet.
    y = --x;

    //x-- will assign the value of x to z first, then var x will be decremented by 1 after.
    //so: x = 2, y=3 and z = 3
    z = x--; 

    printf ("\n %d %d %d", x,y,z);

}
于 2010-10-08T14:09:33.580 回答
0

后缀减量 (x--) 与前缀减量 (--x) 不同。前者返回值 x,然后递减它;后者递减然后返回值。

而且,如果您认为后缀是如何在低级别编写的,您会发现它比前缀慢一点... :)

于 2010-10-08T13:57:16.840 回答
0
y = --x;

X 递减,然后 Y 被赋值为 X (3)

z = x--;

Z 被赋予 X (3) 的值,X 被递减 (2)

于 2010-10-08T13:57:26.540 回答
0

是的:

x = 4
y = 减前x(基本减1后赋值,即y = x-1 = 3
x =3
z =后减x(赋值减1,即z = x = 3 , 那么 x = x - 1
x = 2

所以 x = 2, y = 3, z = 3,正是你所看到的。

于 2010-10-08T13:57:38.397 回答
0

如果运算符是前缀,则递增发生在赋值之前,如果运算符是后缀,则递增发生在赋值之后。

于 2010-10-08T13:59:38.720 回答
0

let**是一个递增/递减运算符。**e表示应用于**e评估结果,而e**表示评估e然后应用于**结果

因此,如果减量和评估是分开的,代码如下:

int x=4,y,z;
x-=1;//3
y = x;//3
z = x;//3
x-=1;//2

这给了你你所拥有的输出;)

于 2010-10-08T13:59:42.070 回答
0
  • x++ / x--称为递增/递减(在...之后修改值)
  • ++x / ++x称为递增/递减(之前修改的值...)

这是您的示例中(大致)发生的情况:

int x=4,y,z;  // declare x=4, y=0, z=0
y = --x;      // decrement x then assign it to y (pre decrement) (y=x=3)
z = x--;      // assign x to z then decrement x (post decrement) (z=3 and x=2)
printf ("\n %d %d %d", x,y,z);  // output 2 3 3

伪代码中的预递增/递减看起来像这样

read value
increment/decrement value
write value
assign value

后递增/递减看起来像这样

read value
assign value
increment/decrement value
write value
于 2010-10-08T14:07:32.660 回答
0
#include<stdio.h>
main ()
{
int x=4,y,z;
y = --x;
z = x--;
printf ("\n %d %d %d", x,y,z);
}

输出 2,3,3 ....................第一次 x=4 很好。y=--x,表示x的值减1并存储在y中,因此现在y=3,x也是3。然后z=x--表示x的值存储在z(z=3)中然后 x 递减,即现在 x=2 但 z=3。当您打印该值时, printf() 打印 2 3 3

于 2010-10-09T09:08:42.207 回答
0

谈论什么i=+j;意思(给定 i=1 和 j=2)

i=+j;相当于i=i+j;所以你的表达变成了i=1+2iei=3

于 2013-07-24T07:30:10.643 回答