两个增值后的问题

本文关键字:问题 两个 | 更新日期: 2023-09-27 18:12:08

我有这样的代码:

 static void Main(string[] args)
    {
        int a = 1;
        int b = 1;
        int c;
        //task A
        c = a;
        Console.WriteLine(c);
        c = a++;
        Console.WriteLine(c);
        Console.WriteLine(c);

        //task B
        c = b;
        Console.WriteLine(c);
        c = b++;
        Console.WriteLine(c);
        c = b;
        Console.WriteLine(c);
        Console.ReadLine();  
    }

输出为:

任务

1 1 1
任务B

1 1 2

任务A问题

我期望任务A的结果是1 1 2,因为在第二次写结果1,因为后增量,但它不应该变成2现在在第三次写?

任务B问题

我期望任务B的结果是1 1 1,因为虽然在第二部分它是后增量,但它不应该在第三次写入时变成1,因为int B = 1和c = B ?

谢谢。

两个增值后的问题

在第一个例子中,这一行很重要:

c = a++;

这将分为两步:

  1. a的电流值赋给c (c现在为1)
  2. a的值增加1 (a现在是2)

由于a的值没有赋给c ,在递增之后,c不知道这个新值,仍然是1

在第二种情况下,在 a递增之后,将a赋值给c 。因此,在最后一步中,c获得了新的a的值,即2。

请记住,post(或pre) increment 会改变变量。因此,在c = a++中,a 在行执行后更改,使得以后所有对a的引用都使用该增量值。

任务A

结果是1 1 1,因为赋值后a变成2,而c保留赋值后的值1

a = 1, c = 1

2) a = 2, c = 1 (a是后增的)

3) a = 2, c = 1 (c不变)

任务B

结果是1 1 2,因为第二次赋值使c = 1 (b的值在增量之前),而第三次赋值使c = 2 (b的值在前一次赋值的增量之后)

c = 1, b = 1

2) c = 1, b = 2 (b为后加)

具体情况如下:

int a = 1;
int b = 1;
int c;
//task A
c = a;   // c is now 1
c = a++; // a is 1 at assignment so c is 1
         // after assignment, a becomes 2; this does not impact c
//task B
c = b;   // c is now 1
c = b++; // b is 1 at assignment so c is 1
         // after assignment, b becomes 2; this does not impact c
c = b;   // c is now 2
要理解的要点是,当您将原语赋值给变量时,它被赋值为原语的值。对于对象,两个变量将指向同一个对象,但是对于原语,值被复制。对变量1的任何修改都不会反映在变量2中。

是预期的行为:a++将给您a的值,增量将在之后完成。++a就是你要找的。此外,本机变量(int, char, float, double)获得赋值,而不是使用equal操作符进行引用。