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

不等式是否s2[i]'\0'or一起检查s1[i]

4

5 回答 5

10

s2[ i ]将被分配给s1[ i ]然后值s1[ i ]将与零进行比较。

参阅此处了解更多信息。

于 2013-06-28T11:29:33.817 回答
4

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

  1. s2[i]为to赋值s1[i]
  2. 检查s1[i]with的值\0
  3. 返回10基于第 2 步
于 2013-06-28T11:29:44.110 回答
4

赋值表达式返回赋值

表达式的值是赋值完成后左操作数的值。

所以当你有:

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

然后,您将分配的值(即s1[i])与'\0'.

于 2013-06-28T11:32:28.533 回答
3

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

我假设是这样:

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

相当于:

s1[i] = s2[i];
if (s1[i] != '\0')
    ;// Do things
于 2013-06-28T11:35:02.153 回答
1

运算符优先级值顺序决定了表达式的求值顺序。

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

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

但是在编程时,这种评估顺序通常很重要。编译器是决定这个顺序的人。并且为了使事情变得复杂,允许根据具体情况随心所欲地做,而无需记录如何(“未指定行为”)。


  • () 运算符具有最高优先级,因此( s1[i] = s2[i] )将首先得到评估。它里面的一切都是一个子表达式。

  • 在 () 子表达式中,[] 运算符具有下一个优先级,因此接下来s[i]计算两个“”。请注意,“ s[i]”也是子表达式,并且由于未指定子表达式的求值顺序,编译器可以自由地s1[i]在之前或之后进行求值s2[i]

    在这种特定情况下,最有可能首先评估哪个并不重要。

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

  • () 中的所有表达式现在都被评估,我们有一个结果,存储在s1[i].

  • 最后,子表达式的这个结果是表达式的剩余运算符的一个操作数:!=。另一个操作数是字符文字'\0'

于 2013-06-28T12:55:08.440 回答