C的新手 - 我正在努力解决这个问题

时间:2015-10-04 21:06:49

标签: c

我不明白其结果如何:

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

抱歉,我不确定你们是否按照我的想法行事。

2 个答案:

答案 0 :(得分:3)

您必须了解增量运算符的工作原理。

您有两项操作:

  • X ++ =&gt;返回X的值,然后将其递增1。
  • ++ X =&gt;将X递增1然后返回。

在您的情况下,有问题的行在这里: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的值之前或之后发生。