帮助我理解这个C ++ for循环的终止参数

时间:2010-04-23 18:58:54

标签: c++ for-loop

我不明白这个for循环的终止参数。这是什么意思?具体来说, - > :0 代表?

for( i = 0; i < (sequence ? sequence->total : 0); i++ )

5 个答案:

答案 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)

你看到两个不同的运营商。

  1. 条件运算符

    condition ? truePart : falsePart
    

    此运算符检查condition是否为真,并评估为truePartfalsePart

  2. 参与成员运算符

    pointer->member
    

    这相当于(*pointer).member

  3. 如果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的成员

这里有两件事:

  1. 这样做的目的是确保sequence在尝试使用NULL取消引用之前不是->指针,
  2. 循环应该像这样重写:
    for( i = 0; sequence && i < sequence->total; i++ )
    这消除了对正在发生的事情的困惑。