下面代码的执行顺序是什么?

时间:2013-06-28 11:27:40

标签: c

( s1[i] = s2[i] ) != '\0'

不平等是否s2[i]'\0'检查s1[i]

5 个答案:

答案 0 :(得分:10)

s2[ i ]将被分配到s1[ i ],然后s1[ i ]的值将与ZERO进行比较。

refer here了解更多信息。

答案 1 :(得分:4)

使用您的语言,它会使用s1[ i ]进行不平等检查,但按以下顺序进行,

  1. s2[i]的值分配给s1[i]
  2. 使用s1[i]
  3. 检查\0的值
  4. 根据第2步
  5. 返回10

答案 2 :(得分:4)

作业的表达式返回指定值

  

表达式的值是后面的左操作数的值   任务已经完成。

所以当你有:

( s1[ i ] = s2[ i ] ) != '\0'

然后您将指定值s1[i])与'\0'进行比较。

答案 3 :(得分:3)

不等式首先进行分配(s1[i] = s2[i]),然后检查s1[i]是否'\0'

我认为它是在if if:

if ((s1[i] = s2[i]) != '\0')
    ;// Do things

相当于:

s1[i] = s2[i];
if (s1[i] != '\0')
    ;// Do things

答案 4 :(得分:1)

运算符优先级评估顺序确定表达式的评估序列。

运算符优先级状态,其中解释表达式的顺序,即哪些运算符属于哪个操作数。它类似于数学优先级,例如,1+1*2是3而不是4,因为*的优先级高于+。由于该优先级规则,表达式将被计算为1+(1*2)

评估顺序与优先顺序不同。它说明了评估子表达式的顺序。另一个数学例子:我们知道(1*1) + (1+1)总是为3.但是当我们计算出来时,我们可以先决定从左括号开始,或者从正确的方法开始。运营商的优先权并不决定我们从哪一个开始。即使*的优先级高于+,我们也可以先开始计算右侧表达式,但不会影响结果。

但是在编程时,这种评估顺序通常很重要。编译器是决定此顺序的编译器。为了使事情变得复杂,可以根据具体情况随意做,而不记录如何(“未指明的行为”)。


  • ()运算符具有最高优先级,因此将首先评估( s1[i] = s2[i] )。里面的一切都是一个子表达。
  • 在()子表达式中,[]运算符具有下一个优先级,因此接下来将评估两个“s[i]”。请注意,“s[i]”也是子表达式,并且由于未指定子表达式的评估顺序,编译器可以在{{1}之前或之后自由评估s1[i] }。

    在这种特殊情况下,哪一个最有可能被评估的情况并不重要。

  • 在()子表达式中,接下来是=运算符。操作数s2[i]的内容将复制到s2[i]

  • 现在评估()中的所有表达式,我们有一个结果,存储在s1[i]
  • 最后,子表达式的结果是表达式的剩余运算符的一个操作数:s1[i]。另一个操作数是字符文字!=