起因
事情是这样的:
俺在一个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循环
- 整数类型
- 指针的使用
- 过程参数的声明
这个题目看上去简单,但是是一个不错的切入点。