【问题标题】:Why 2 and -2 instead of 1 and -1? [closed]为什么是 2 和 -2 而不是 1 和 -1? [关闭]
【发布时间】:2013-01-09 04:32:18
【问题描述】:

我写了这个非常简单的程序:

    #include <iostream>

using namespace std;

int main()
{
    int x = 0;

    cout << x++<<endl;
    cout<<++x<<endl;
    int y = 0;

    cout<<y--<<endl;
    cout<<--y<<endl;
    return 0;
}

这是我运行它时得到的:

0

2

0

-2

我使用 code::blocks 来编写程序,我的操作系统是 Ubuntu 12.10。 我应该如何修复我的程序,这样我才能看到 0 1 0 -1?

【问题讨论】:

  • 这个问题肯定被问了一百万次了。
  • 你试过什么?观看无数个答案的出现......这是一个傻瓜的傻瓜!
  • 没什么错,只是你调用了你不理解的副作用。在使用之前不要使用 ++ 和 -- 运算符。
  • 我不知道如何搜索以找到我正在寻找的确切答案。
  • @dandan78:如果有的话,您有参考资料,我们可以链接到他们。关闭过于本地化是错误的(因为它可能对很多人有用)。但如果它在之前被询问过,我们应该将其链接为副本。

标签: c++ increment decrement


【解决方案1】:

你需要了解concepts of post increment(decrement) and pre increment(decrement)

后增量

cout << x++<<endl;

你可以把这行理解为“返回 x 的值”+“增加 x 的值”。即返回值在增量之前。

所以返回 0 并将 x 的值增加到 1。

预增量

cout<<++x<<endl;

这是相反的 - 返回增加的值。

所以将 x 的值增加到 2 并返回 2。

【讨论】:

    【解决方案2】:
    cout << x++ << endl;
    

    后增量将 x 从 0 增加到 1,并产生 值 0。x 的值现在是 1。

    cout << ++x << endl;
    

    预增量将 x 从 1 增加到 2,并产生 值 2。x 的值现在是 2。

    【讨论】:

    • "预增量将 x 从 1 增加到 2,并产生新值 2。"当 x 的第一个值为 0 时,为什么从 1 到 2?这就是我要找的。​​span>
    • @AmirRazoR:第一行将其递增到 1,因此这是第二行之前的值。
    • 好的,我明白了,谢谢
    【解决方案3】:

    x++ 将使您的变量为 1,但由于那时的 after++ 行为而被计算为 0 ++x 将为 2

    Post-increment and pre-increment within a 'for' loop produce same output

    【讨论】:

      【解决方案4】:

      X++ 首先打印它,然后增加值。 ++X 首先增加值,然后打印它。

      所以,

      cout<<x++<<endl   // Prints '0' and increments to '1'
      cout<<++x<<endl   // Increments '1' to '2' and prints it
      

      【讨论】:

        猜你喜欢
        • 2017-07-10
        • 1970-01-01
        • 2011-05-12
        • 2021-03-13
        • 2011-01-29
        • 2022-12-16
        • 1970-01-01
        • 1970-01-01
        • 2016-07-19
        相关资源
        最近更新 更多