两个增值后的问题
本文关键字:问题 两个 | 更新日期: 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++;
这将分为两步:
- 将
a
的电流值赋给c
(c
现在为1) -
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 = 12) a = 2, c = 1 (a是后增的)
3) a = 2, c = 1 (c不变)
任务B
结果是1 1 2,因为第二次赋值使c = 1 (b的值在增量之前),而第三次赋值使c = 2 (b的值在前一次赋值的增量之后)
c = 1, b = 12) 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
操作符进行引用。