起因
事情是这样的:
俺在一个Delphi交流QQ群,有点冷场,俺想热一下场子就发了下面这个段子。其实这是之前俺带新人时的一道题目。

第一个回答
第一个网友给的答案是 i:=i-1;
俺说这个答案是不对的,因为 Delphi在编译时是不允许出现这样的代码,Delphi会自动检查。
[Error] Unit1.pas(35): Assignment to FOR-Loop variable 'i'
第二个回答
使用汇编,Delphi下用汇编还是比较方便的。不过我告诉网友,这个回答是可以的,但是不是一句。因为用汇编的话
ASM
MOVE
........
END;
这样就不是一句代码了,
后面还有几个网友也参与了讨论,但是都不是一句代码。
答案
有很多种,下面是其中之一
pint(@i)^ := 11;
var
  i, c: integer;
begin
  c := 0;
  for i := 1 to 10 do
    begin
      pint(@i)^ := 11; // 加一句代码 使for循环 变成 死循环
      c := c + 1;
    end;
  showmessage(inttostr(c));
end; 
其实这个题目还有个更容易理解的答案。
var
  i, c: integer;
  procedure proc(var v: integer);
  begin
    v := 11;
  end;
begin
  c := 0;
  for i := 1 to 10 do
    begin
      proc(i); // 加一句代码 使for循环 变成 死循环
      c := c + 1;
    end;
  showmessage(inttostr(c));
end; 
我在设计这道题目时,打算以这道题目作为切入点,讲解一下几个知识点
- For循环
 - 整数类型
 - 指针的使用
 - 过程参数的声明
 
这个题目看上去简单,但是是一个不错的切入点。



















