为什么第一次分配str1 [0]?不应该是str1 [1]吗?

时间:2017-02-05 13:40:16

标签: c for-loop pre-increment

在for循环中,我们使用 let time = lastPostTimestamp let datum = Date(timeIntervalSince1970: time as! TimeInterval) let seconds = Date().timeIntervalSince(datum as Date) guard seconds > 300 else {return} // 5 minutes button.isEnabled = true ,这意味着在循环开始执行之前++i递增到i。我在这里弄错了什么?

以下是代码:

1

4 个答案:

答案 0 :(得分:5)

for循环语法由三个语句组成。第三个("更新步骤")在循环体结束时执行。所以在第一次迭代中,我是零。

表达式

for(init_stmt; cond_expr; update_stmt)
  body_stmt;

将导致代码大致相当于以下内容:

{
  init_stmt;
  while(cond_expr) {
    body_stmt;
    update_stmt;
  }
}

答案 1 :(得分:1)

我担心你错了:在for陈述的增量表达的上下文中,++ii++i += 1和{{1都具有相同的效果。此外,此递增表达式在每次迭代后执行一次,然后再评估条件,而不是第一次迭代之前执行。以下是i = i + 1语句评估的步骤:

  1. 评估初始化表达式for;
  2. 评估条件表达式:如果为false,则退出循环。
  3. 评估循环体:
    • 如果评估i = 0语句,则退出循环
    • 如果评估break语句直接分支到步骤4;
    • 否则,转到第4步。
  4. 评估增量表达式continue;
  5. 分支到第2步。
  6. 最后一个语句正确使用++istr2[i] = '\0';循环末尾的i值是第一个未通过条件的值,for的值为{em> length str1[i] == '\0'中的C字符串。这是您要在str1中存储空终止符的索引。

    请注意,代码可以简化并以这种方式更安全:

    str2

答案 2 :(得分:1)

你的前提是错的。在循环开始之前,i不会递增到1。

for (initialization_statement; conditional_statement; update_statement) {
    body_of_for_loop
}

for循环的工作方式是执行初始化语句,然后检查条件语句是否为true。如果条件语句是true,则执行for循环的主体。执行for循环的主体后,将执行update语句,然后再次评估条件语句,依此类推。

答案 3 :(得分:0)

For循环语法:

for (initialization; condition; increment or decrement)
{
       //Code
}

第1步:初始化变量(i = 0)。

第2步:: 检查条件(str1[i] != '\0'

第3步:如果条件为真,则转到for循环体。

步骤4:成功执行循环体后,转到递增或递减操作部分(++i)。

有关更多理解,请参阅图片。

img