【问题标题】:Why doesn't ++ increment integer value?为什么 ++ 不增加整数值?
【发布时间】:2017-05-25 15:32:55
【问题描述】:

在 C 中,为什么 num1++ 不增加 printf()

int num1 = 1;
printf("num1=%d", num1++);

【问题讨论】:

  • 知道前缀和后缀递增的区别吗? IE。例如之间的区别++num1num1++?
  • Num1++ 是后增量。在 printf 之后的下一行,如果使用了 num1,它的值为 2。
  • @FedericoklezCulloca 如果没有在文档中查找基本信息的技能,您将无法成为任何事情的向导。
  • @FedericoklezCulloca 我不买它。任何教程的第 2 章都会教授前缀和后缀。
  • @squeamishossifrage 不是那个 IMO 的副本。那个充满了 UB 和可疑的演员表。

标签: c


【解决方案1】:

++ 确实增加操作数...但在其后缀形式中,它计算为值之前增加。

++num1 反而会评估为 after 递增的值。

【讨论】:

    【解决方案2】:

    因为表达式

    num1++
    

    计算为num1


    你可能想这样做:

    ++num1

    计算结果为num1 + 1


    但是请注意,两个表达式都将num1 加一。

    在下一个语句中计算 num1 会计算出增加的值。


    总之

    在 C 中,为什么 num1++ 不在 printf() 中递增?

    num1++ 确实增加了num1,但它的评估结果为num1,而该评估结果就是您传递给printf() 的结果。

    【讨论】:

    • 是的,但是为什么呢?我的意思是,我知道为什么,但如果这很明显,OP 就不会问了。
    • @FedericoklezCulloca 因为这两个运算符在不同的情况下都有用?
    • @Quentin 不是“它为什么存在”,如果我不知道 ++n 不同(甚至存在),为什么 n++ 评估为 n。我要求 Neroku 更好地详细说明他们的答案。
    • @FedericoklezCulloca 这可能是我很愚蠢,但我没有看到任何其他答案,而不是“因为 C 是这样设计的”......
    • 那个答案是错误的。 C 在这个意义上没有“线条”的概念。它有一个“序列点”的概念..
    【解决方案3】:

    这是因为 ++ 在变量之后,这将解决您的问题

    printf("num1=%d", ++num1);
    

    你做变量的方式将在打印出它的内容后递增,所以如果你对这个变量执行另一个 printf 你应该有正确的值,通过把它放在前缀的方式,它会在输出之前递增变量它

    【讨论】:

      【解决方案4】:

      后缀++ 运算符求出操作数的当前值,然后将其递增。如果你再次调用printf 并以num1 作为参数,你会看到增量的效果。

      来自C standard 的第 6.5.2.4 节:

      2 后缀++ 运算符的结果是操作数的值。作为副作用,操作数对象的值递增(即 即,将相应类型的值 1 添加到其中)。

      如果您使用前缀++ 运算符,即++num1,则增量将反映在输出中。

      【讨论】:

        【解决方案5】:

        因为在变量末尾有 ++ 会导致在操作之后发生增量。变量前加++就是运算前的加法。

        【讨论】:

        • 这样的简短答案通常更适合作为 cmets。您可以通过简短的代码示例来支持您的回复。
        • 这实际上是这篇文章中最简单、最容易理解的答案。如果您要向初学者程序员解释简单的事情,通常最好使用日常语言而不是后缀、前缀、评估等短语。
        猜你喜欢
        • 1970-01-01
        • 2021-11-24
        • 1970-01-01
        • 1970-01-01
        • 2019-09-14
        • 2017-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多