pascal for loop如何工作?

时间:2016-02-17 11:40:57

标签: pascal

我有一个与for循环在Pascal中的工作方式有关的问题:

Program example;
var i:integer;
Begin
     i:=7;
     for i:=1 to i do write(i);
End.

这段代码输出:1234567。 我认为编译器会生成变量i的辅助副本,然后在for循环中使用该副本。

3 个答案:

答案 0 :(得分:3)

请注意,根据ISO7185标准,这需要在Pascal中使用。应在修改循环计数器之前复制“结束值”。

https://github.com/Leporacanthicus/lacsap/blob/master/test/Basic/iso7185pat.pas#L761

答案 1 :(得分:2)

在Pascal的for loop中,我们有一个名为loop counter的变量来控制循环的迭代,而这个变量在循环的每次迭代中都会发生变化,所以就是这样在此处声明的i:代码中的i:=1

第二个是在循环上面声​​明的变量,也称为i,但它是一个变量,它是循环的final value

考虑一下:

Program example;
var i:integer;
var addr:^word;
Begin
     i:=10; 
     for i:=1 to i do addr:=@i;
     addr^ := addr^+1; { I add 1 to the last loop counter }
     writeln(i);       { This is final variable, I don't add anything to the final variable of the loop }
     writeln(addr^);   { This is value of the last loop counter index  }
                { Both variables give us the same result }
                { Proposal: In my opinion, your guess about the copy is correct } 
End.

正如代码中的评论一样 - 在我看来,pascal 会创建此变量的副本

希望它会有所帮助! 如果是,请通过投票通知我。

问候!

答案 2 :(得分:2)

这里的要点是Pascal编译器会在第一次执行时设置 for 的参数。然后在对控件值执行任何操作之前设置起点 i:= 1 和结束点 7 ,然后启动循环。

但我应该指出,这在编程中是糟糕的做法。除非你只是在提出一个学术性或投机性的问题,否则我认为没有理由去拯救"做一个像这样的变量名。

有趣的是要注意,如果在循环内部完成,滥用控制变量名称可能会导致不可预测的结果。

正如他们在那些表现出危险冒险的节目中所说的那样,不要试图在家里这样做!