首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >X= X++;和X++;有什么区别?

X= X++;和X++;有什么区别?
EN

Stack Overflow用户
提问于 2008-10-22 14:34:29
回答 10查看 49.9K关注 0票数 56

你以前试过这个吗?

代码语言:javascript
复制
static void Main(string[] args)
{
    int x = 10;
    x = x++;
    Console.WriteLine(x);
}

输出: 10。

而是为了

代码语言:javascript
复制
static void Main(string[] args)
{
    int x = 10;
    x++;
    Console.WriteLine(x);
}

输出: 11。

有人能解释一下为什么会这样吗?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2008-10-22 14:35:36

X++将递增该值,但随后返回其旧值。

因此,在这种情况下:

代码语言:javascript
复制
static void Main(string[] args)
{
    int x = 10;
    x = x++;
    Console.WriteLine(x);
}

你在11处有一段时间,然后它又回到了10,因为10是(x++)的返回值。

您可以改为这样做,以获得相同的结果:

代码语言:javascript
复制
static int plusplus(ref int x)
{
  int xOld = x;
  x++;
  return xOld;
}

static void Main(string[] args)
{
    int x = 10;
    x = plusplus(x);
    Console.WriteLine(x);
}

值得一提的是,如果你这样做了,你会得到11的预期结果:

代码语言:javascript
复制
static void Main(string[] args)
{
    int x = 10;
    x = ++x;
    Console.WriteLine(x);
}
票数 78
EN

Stack Overflow用户

发布于 2008-10-22 14:36:40

在赋值x = x++中,首先提取x的旧值以用于计算右侧的表达式,在本例中为'x';然后,将x递增1。最后,通过赋值语句将表达式求值的结果(10)赋值给x

也许一个等效的代码会让困境变得清晰:

代码语言:javascript
复制
var tmp = x;
x++;
x = tmp;

这相当于C#中的x = x++代码。

票数 57
EN

Stack Overflow用户

发布于 2008-10-22 14:37:01

x++的行为是递增x,但在递增之前返回值。出于这个原因,它被称为post增量。

所以x= x++;简单地说

1.返回值,然后

2.递增x,然后

3.将x的原始值(在步骤1中返回)赋给x。

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/226002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档