( s1[i] = s2[i] ) != '\0'
不平等是否s2[i]
或'\0'
检查s1[i]
?
答案 0 :(得分:10)
s2[ i ]
将被分配到s1[ i ]
,然后s1[ i ]
的值将与ZERO进行比较。
请refer here了解更多信息。
答案 1 :(得分:4)
使用您的语言,它会使用s1[ i ]
进行不平等检查,但按以下顺序进行,
s2[i]
的值分配给s1[i]
s1[i]
\0
的值
1
或0
。
醇>
答案 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]
。另一个操作数是字符文字!=
。