pascal for 循环是如何工作的?
How does the pascal for loop work?
我有一个关于 for 循环在 Pascal 中的工作方式的问题:
Program example;
var i:integer;
Begin
i:=7;
for i:=1 to i do write(i);
End.
这段代码输出:1234567
。
我认为编译器制作了变量 i
的第二个副本,然后在 for
循环中使用该副本。
在 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 创建了这个变量的副本。
希望对您有所帮助!
如果是,请通过投票让我知道。
此致!
这里的要点是 Pascal 编译器将在第一次执行时为 for 设置一次参数。然后它设置一个起点 i:=1 和终点 7 在对控制值做任何事情之前,然后开始循环。
但我应该指出,这是编程中的不良做法。除非你只是提出一个学术或推测性的问题,否则我认为没有理由 "save" 一个变量名来做这样的事情。
同样值得注意的是,如果在循环内进行这种滥用控制变量名称的行为,可能会导致不可预知的结果。
正如他们在那些展示危险冒险的节目中所说的那样,不要试图在家里这样做!
请注意,根据 ISO7185 标准,这是在 Pascal 中工作所必需的。 "end value" 应在修改循环计数器之前复制。
https://github.com/Leporacanthicus/lacsap/blob/master/test/Basic/iso7185pat.pas#L761
我有一个关于 for 循环在 Pascal 中的工作方式的问题:
Program example;
var i:integer;
Begin
i:=7;
for i:=1 to i do write(i);
End.
这段代码输出:1234567
。
我认为编译器制作了变量 i
的第二个副本,然后在 for
循环中使用该副本。
在 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 创建了这个变量的副本。
希望对您有所帮助! 如果是,请通过投票让我知道。
此致!
这里的要点是 Pascal 编译器将在第一次执行时为 for 设置一次参数。然后它设置一个起点 i:=1 和终点 7 在对控制值做任何事情之前,然后开始循环。
但我应该指出,这是编程中的不良做法。除非你只是提出一个学术或推测性的问题,否则我认为没有理由 "save" 一个变量名来做这样的事情。
同样值得注意的是,如果在循环内进行这种滥用控制变量名称的行为,可能会导致不可预知的结果。
正如他们在那些展示危险冒险的节目中所说的那样,不要试图在家里这样做!
请注意,根据 ISO7185 标准,这是在 Pascal 中工作所必需的。 "end value" 应在修改循环计数器之前复制。
https://github.com/Leporacanthicus/lacsap/blob/master/test/Basic/iso7185pat.pas#L761