#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 = 1
和j = 2
)?
y = --x
表示“将 x 减一,然后将结果存储在 y 中”
z = x--
表示“保存 x 的温度。将 x 减一。将温度值存储在 z 中”
因此:
后缀递减运算符 (x--) 返回变量递减之前的值。
您必须了解后减量和预减量运算符的概念。
两者都会递减您的变量,但其中之一将返回原始值 ( x--
),其中之一将返回递减后的值 ( --x
)。
简单解释:
--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);
}
后缀减量 (x--) 与前缀减量 (--x) 不同。前者返回值 x,然后递减它;后者递减然后返回值。
而且,如果您认为后缀是如何在低级别编写的,您会发现它比前缀慢一点... :)
y = --x;
X 递减,然后 Y 被赋值为 X (3)
z = x--;
Z 被赋予 X (3) 的值,X 被递减 (2)
是的:
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,正是你所看到的。
如果运算符是前缀,则递增发生在赋值之前,如果运算符是后缀,则递增发生在赋值之后。
let**
是一个递增/递减运算符。**e
表示应用于**
并e
评估结果,而e**
表示评估e
然后应用于**
结果。
因此,如果减量和评估是分开的,代码如下:
int x=4,y,z;
x-=1;//3
y = x;//3
z = x;//3
x-=1;//2
这给了你你所拥有的输出;)
这是您的示例中(大致)发生的情况:
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
#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
谈论什么i=+j;
意思(给定 i=1 和 j=2)
i=+j;
相当于i=i+j;
所以你的表达变成了i=1+2
iei=3