首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在FOR-loop语句中增加FOR-loop值?

如何在FOR-loop语句中增加FOR-loop值?
EN

Stack Overflow用户
提问于 2009-07-09 17:56:26
回答 6查看 10.4K关注 0票数 2

我想知道如何增加FOR-loop语句中的值。

这是我的代码。

代码语言:javascript
复制
function Check(var MemoryData:Array of byte;MemorySignature:Array of byte;Position:integer):boolean;
var i:byte;
begin
 for i := 0 to Length(MemorySignature) - 1 do
 begin
  while(MemorySignature[i] = $FF) do inc(i); //<< ERROR <<
  if(memorydata[i + position] <> MemorySignature[i]) then Result:=false;
 end;
 Result := True;
end;

错误是:将E2081赋值给FOR循环变量'i‘。

我正在尝试将一个旧代码从C#翻译成Delphi,但是我不能增加'i‘。增加“i”并不是唯一的方法,但我想知道问题在哪里。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-07-10 06:57:40

当然,其他人(通常)是正确的。没有说的是,你的循环中的'i‘不存在。Delphi为它使用了一个CPU寄存器。这就是为什么你不能改变它,这就是为什么你应该使用'for‘循环(而不是'while'),因为'for’要快得多。这是你修改过的代码(没有经过测试,但我想你已经明白了)--还有你有一些bugs -也修复了它们:

代码语言:javascript
复制
function Check(var MemoryData:Array of byte;MemorySignature:Array of byte;Position:integer):boolean;
var i:byte;
begin
 Result := True; //moved at top. Your function always returned 'True'. This is what you wanted?
 for i := 0 to Length(MemorySignature) - 1 do //are you sure??? Perhaps you want High(MemorySignature) here... 
 begin
  if MemorySignature[i] <> $FF then //speedup - '<>' evaluates faster than '='
  begin
   Result:=memorydata[i + position] <> MemorySignature[i]; //speedup.
   if not Result then 
     Break; //added this! - speedup. We already know the result. So, no need to scan till end.
  end;
 end;
end;

...also MemorySignature应具有'const‘或'var’。否则,就像现在一样,数组将被复制。这意味着每次调用“Check”时速度都会减慢。有了一个'var‘,在代码不变的情况下,事情要快得多,因为MemorySignature没有改变。

HTH

票数 7
EN

Stack Overflow用户

发布于 2009-07-09 18:00:49

在这种情况下,您可以只执行'continue‘而不是inc(i)

票数 7
EN

Stack Overflow用户

发布于 2009-07-09 18:06:33

除了Lasse所写的内容之外,赋值给循环变量通常被认为是一种代码气味。它使代码更难阅读(如果你想过早地离开循环,你可以用break/continue表达得更清楚),而且经常是偶然完成的,导致各种令人讨厌的副作用。因此,Borland (现在的CodeGear)咬紧牙关,将循环变量赋值设为非法,而不是跳过一系列循环,使编译器不再对循环变量进行优化。

如果您真的想手动处理循环索引,请考虑使用while-loop。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1105519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档