Why is this integer not incrementing twice?
本问题已经有最佳答案,请猛点这里访问。
我对下面代码的结果感到困惑。为什么"b"在执行这些操作时保留了一个看起来不正确的值?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | int a = 0; int b = 5; a = b++; b = b++; Console.WriteLine("For b = b++; b=" + b.ToString()); // b should be 7 but it's 6 a = 0; b = 5; a = b--; b = b--; Console.WriteLine("For b = b--; b=" + b.ToString()); // b should be 3 but it's 4 a = 0; b = 5; a = b + 1; b = b + 1; Console.WriteLine("For b = b++; b=" + b.ToString()); |
产量
1 2 3 | b=6 b=4 b=6 |
有人能用C语言解释这种行为吗?它是如何工作的?
这确实是postfix操作符的行为,如本文所述。
例如,当你写:
1 | b = b++; |
发生以下情况:
因此,
因为当
所以:
1 2 | int a = 0; int b = a++; |
运行此代码后,
这与使用运算符作为前缀相反:
1 2 | int a = 0; int b = ++a; |
运行此代码后,
这是记录在案的行为,已经存在很长时间了。
当你使用
1 2 3 4 | int a = 0; int b = 5; a = b++; b = b++; |
你把A设为6,然后把B设为6。当您将b写入命令行时,它显示6,因为在递增b时从未使用a。如果你也想用A,你必须
1 2 3 4 5 | int a = 1; int b = 5; b = b++; b += a; Console.WriteLine("For b = a + b++; b=" + b.ToString()); |
但总的来说,我看不出在这种增量中有任何用处。
指令A=B++存储在堆栈上,但没有进行计算,因为之后没有使用它。
要获得正确的结果,请使该指令具有示例更改该行的意义:
1 | Console.WriteLine("For b = b++; b=" + b.ToString()); |
通过那个:
1 2 | Console.WriteLine("For a = b++; a=" + a.ToString()); Console.WriteLine("For b = b++; b=" + b.ToString()); //should give 7 |