我不明白其结果如何:
2
2
2
这是我的代码:
#include <stdio.h>
int main()
{
int a = 1, b = 1, x = 0, y = 0;
double w;
x = 1 + a++;
printf("x = %d\n", x);
printf("a = %d\n", a);
y = ++b;
printf("y = %d\n", y);
printf("b = %d\n", b);
}
好的,我理解后缀和前缀,但我仍然不明白为什么a和b是2而不是1。 他们没有被保存在任何地方 所以当你说x = 1 + a ++和y = ++ b时, b变为2并保存在y中。如果没有保存在b = ++ b。
之内,b如何保持2抱歉,我不确定你们是否按照我的想法行事。
答案 0 :(得分:3)
您必须了解增量运算符的工作原理。
您有两项操作:
在您的情况下,有问题的行在这里:x = 1 + a++;
这转化为:
返回a(1)的值并将其递增(a变为2)。
设置x的值等于1 + a返回的值(x变为2)
希望这有帮助。
答案 1 :(得分:1)
C语言预增量和后增量运算符
#include <stdio.h>
int main()
{
int a = 1, b = 1, x = 0, y = 0;
double w;
x = 1 + a++;
printf("x = %d\n", x);
printf("a = %d\n", a);
y = ++b;
printf("y = %d\n", y);
printf("b = %d\n", b);
}
预增量意味着增量变量 >>使用其值之前。后增量意味着增量变量 >>使用其值后。要了解这些运算符的工作原理,让我们看一下第一种情况:
a = 1;
x = 1 + a++; // ++ on right means post-increment
首先,您要将a
的值设置为1
。然后,您要将a
(值为1
)添加到x
(值为1
)。结果是x
的值为2
。然后,在语句完成执行后,作为副作用,a
会递增,因为您使用了 ++
的后递增形式。因此,在x
设置为2
的值后,a
的值将变为2
。
相反,如果您使用了预增量运算符:
a = 1;
x = 1 + (++a); // ++ on left means pre-increment
同样,您从a = 1
开始,但这一次,{/ 1}}在语句中使用之前递增,因为左边是a
- 表示预增量。换句话说,首先,++
增加到a
的值。然后将2
添加到a
(其值为x
),将1
的值设置为x
。
在上述两种情况下,3
的值均为a
,并变为1
。区别在于是否在表达式中使用2
的值之前或之后发生。