预先增加运算符

时间:2019-05-08 02:53:37

标签: c#

我不明白为什么帖子增加后,i和k的值在行号19,20中仍为5?

尽管帖子增加了,但i的值仍然是5。

`using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
namespace Increment
{
class Program
    {
        static void Main(string[] args)
        {
            int i = 5;
            int j = 10;
            Console.WriteLine("before incrementing{0}",i);    
             i=i++;    
            Console.WriteLine("after incrementing {0}",i);   //i=5? 
             int k = i;    
    Console.WriteLine("after incrementing i and assign {0}", k);//K=5?
}
    }
}`

2 个答案:

答案 0 :(得分:5)

将后递增和前递增想象为函数:

 int PreIncrement(ref int i)
 {
     i = i + 1;
     return i;
 }

 int PostIncrement(ref int i)
 {
     int valueBefore = i;
     i = i + 1;
     return valueBefore;
 }

在这种情况下

i = i++;

将等同于

i = PostIncrement(ref i);

您正在按以下顺序执行两项操作:

  • 递增i
  • i设置为等于其递增之前的值

答案 1 :(得分:0)

++的{​​{3}}有相当清楚的示例。 “ x++的结果是操作前x的值,如下面的示例所示……。”

这意味着无论您在表达式中使用x++还是要获取初始值,即在x递增之前。因此,如果x4,则表达式中将使用值4,并且x将递增为5。如果将表达式的值分配给变量,则该变量将设置为4。您恰好选择了x作为分配目标,因此覆盖了后递增的值。