【问题标题】:Increment Operator in PHP and C Language [duplicate]PHP和C语言中的增量运算符[重复]
【发布时间】:2012-09-11 12:43:26
【问题描述】:

可能重复:
Could anyone explain these undefined behaviors (i = i++ + ++i , i = i++, etc…)

我遇到了一个关于增量运算符的奇怪问题。

我在 PHP 和 C 中得到相同表达式的不同输出。

In C language

main()
{
    int i = 5;
    printf("%d", i++*i++); // output 25;
}

In PHP

$i = 5;
echo $i++*$i++; // output 30

谁能解释这种奇怪的行为?谢谢。

【问题讨论】:

  • 在 C 中它是未定义的行为,所以从技术上讲,您可以获得任何输出。好读:Undefined Behavior and Sequence Points
  • @Ashwini - 为什么重要?你会用这样的代码做什么?
  • 在 PHP 中,这也是未定义的。见Example 1

标签: php c math increment


【解决方案1】:

在 C 中,结果是不确定的,因为两个操作数中的任何一个都可以先求值,因此第二次读取它是错误的。

而且,在 PHP 中,如果结果是 42 等待对 php.ini 进行一些更改,我不会感到惊讶。

【讨论】:

  • 我的宗教希望我因为提到 42 而投票,但我宁愿不要在封闭的副本上 ^^"
【解决方案2】:

++ 的行为在此样式中使用时未定义,因为您不确切知道何时会发生 ++ 操作以及何时从x++“返回”值。

【讨论】:

    【解决方案3】:

    【讨论】:

      【解决方案4】:

      这是未定义的行为,因为 i++++i--ii-- 在作为函数参数传递时不会以任何特定顺序递增/递减。

      不仅如此,如果我没记错的话,我相信printf("%d", i++*i++); 只是输出5*5,然后将i 递增两次。

      记住++i在操作前递增,i++在操作后递增。 考虑这段代码:

      int i, x = 5;
      
      int i = x++;   // i is now equal to 5 and x is equal to 6 because the increment happened after the = operation.
      x = 5;         //set x back to 5
      i = ++x;       //i is now equal to 6 and x is equal to 6 because the increment happened before the = operation.
      

      C 就是这种情况,但我不能保证 PHP

      【讨论】:

        猜你喜欢
        • 2021-08-03
        • 1970-01-01
        • 1970-01-01
        • 2016-02-02
        • 1970-01-01
        • 2015-04-17
        • 2014-01-19
        • 2015-09-25
        • 2013-07-15
        相关资源
        最近更新 更多