【问题标题】:post increment about an expression [closed]发布关于表达式的增量[关闭]
【发布时间】:2014-11-19 17:45:57
【问题描述】:

我被问到以下表达式的输出:-

I=10;
I++;
I++;
I++;

这段代码末尾的 I 值是多少。据我所知,c 中的后增量意味着首先执行任何其他任务,如赋值、printf 等,然后再执行变量的值。同样在这种情况下,首先我应该是 10,然后我应该是 10,然后是 11。但最终的答案是 10。怎么样?

【问题讨论】:

  • 既不是 10 也不是 11。到该代码的末尾,I 的值是 13。您可以随时运行它并自己找出来......
  • 这是 4 个表达式。你的意思是printf("%d %d %d %d", I = 10, I++, I++, I++)

标签: c


【解决方案1】:

遮阳篷应该是 13 岁。

int i = 10;
i++;
i++;
i++;
printf("%d", i);

自己测试一下

【讨论】:

    【解决方案2】:

    这将是一个九行程序来演示您的问题中I 会发生什么。在包含I++; 的表达式中,使用I 然后递增。在您的示例中,由于 I 未在任何语句中使用,您可能已经很好地使用了 ++I 来预递增它。但如果一个语句多次使用或测试I,或者包含可能无法执行的部分,则必须在之后增加I

    #include<stdio.h>
    int main() {
        int I = 10;
        I++;
        I++;
        I++;
        printf ("%d\n", I);     // prints 13
    
        if (1 || I++)           // I++ is not executed
            printf ("%d\n", I); // prints 13
    
        if (1 && I++)           // I++ is executed
            printf ("%d\n", I); // prints 14
        return 0;
    }
    

    【讨论】:

      【解决方案3】:

      让我们创建一个int i = 10;

      i++;
      

      本质上等同于:

      i = i + 1;
      

      不过还是有一点点区别:

      如果你printf("%d", i++);

      打印的值为 10,因为 ++ 后缀仅在使用该值后才会增加该值,i 仅在下一行等于 11,当:

      printf("%d", i + 1);

      将打印 11,因为它将在 printf 运行之前计算,而 i 它自身不会更改,因为我们没有为其分配值,我们只使用它来计算新值。

      如果您希望行为与i = i + 1; 完全相同,您可以使用++ 前缀,例如:

      printf("%d", ++i);

      在这种情况下,将打印 11,i 的值将增加 1。

      在您的代码中,您使用++ 后缀将i 增加3 次,而实际上并未使用i,因此所有代码剂量都是将i 增加1,有时。所以代码末尾i等于13。

      您可以在此处找到有关运算符的更多信息: http://www.tutorialspoint.com/cprogramming/c_operators.htm

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-13
        • 1970-01-01
        • 2012-12-05
        • 2017-03-07
        • 1970-01-01
        相关资源
        最近更新 更多