我不明白这个for循环的终止参数。这是什么意思?具体来说, ? , - > 和 :0 代表?
for( i = 0; i < (sequence ? sequence->total : 0); i++ )
答案 0 :(得分:8)
这:(sequence ? sequence->total : 0)
(它被称为“三元组”,因为它需要三个输入)就像是这样说:
if (sequence)
replaceEntireExpressionWith(sequence->total);
else
replaceEntireExpressionWith(0);
->
是一个解除引用程序,就像*
一样,但它使struct
这样的用户数据类型易于使用。
sequence->total
表示sequence
是指向其中一种数据类型的指针,并且您正在访问它所指向的total
属性。它完全相同:
(*sequence).total;
所以循环:
for( i = 0; i < (sequence ? sequence->total : 0); i++ )
从sequence
评估为false
后,
退出。
三元if构造用于确保它们不解除引用(0 == false
)空指针,因为如果它们只是将->
作为条件,它们每次都会取消引用它。不快乐的! =(
答案 1 :(得分:2)
如果序列无效,或i是否达到了名为“total”的成员。
?如果序列无效,则当i = 0时,循环结束。(因此它不会运行)
答案 2 :(得分:2)
你看到两个不同的运营商。
条件运算符
condition ? truePart : falsePart
此运算符检查condition
是否为真,并评估为truePart
或falsePart
。
参与成员运算符
pointer->member
这相当于(*pointer).member
。
如果0
为空,您的表达式将评估为sequence
,如果total
不为空,则表达式sequence
指向的结构的{{1}}属性。
答案 3 :(得分:1)
这里有两件事情可以解决:
?和:syntax是三元操作
的语法http://en.wikipedia.org/wiki/Ternary_operation
这里的其他答案简明扼要地解释了三元运算符
- &gt;语法是从指针访问成员而不是引用或值
此代码相当于:
int total = 0;
if(sequence){
total = sequence->total;
}
for( i=0; i < total; ++i){
...
}
答案 4 :(得分:0)
<强>? :是三元运营商。它在?之前计算表达式,结果是?之后的表达式?如果为true,或者表达式为:if false。
- &gt; 是我称之为“操作员箭头”的内容,但其实质上是取消引用指针sequence
,然后访问名为total
的成员
这里有两件事:
sequence
在尝试使用NULL
取消引用之前不是->
指针,for( i = 0; sequence && i < sequence->total; i++ )