我是delphi初学 请教一个很菜的问题 (100分)

  • 主题发起人 主题发起人 cchhw
  • 开始时间 开始时间
C

cchhw

Unregistered / Unconfirmed
GUEST, unregistred user!
我写了如下过程
procedure TForm1.Button1Click(Sender: TObject);
var
i,j:integer;
k:real;

begin
i:=4;
j:=7;
k:=1.13;
for i:=to 5 do
begin
j:=i;
showmessage(inttostr(i));
end;
end;
为什么 for i:=to 5 do 中 i 的值能从1 到5; 而 i:=4;
k:=1.13;j:=i
不能给i,k,j赋值 。而把 var i,j:integer;k:real;不定义在 过程内 ,定义在整个单元 即可用 ,为什么。
请教 万分感谢
 
@_@ 没明白你说什么
 
首先
i:=4;
j:=7;
k:=1.13;
是可以赋值的,你可以设置 watch 观察.或者这样

procedure TForm1.Button1Click(Sender: TObject);
var
i,j:integer;
k:real;

begin
i:=1;//在这里该变i的值 你会发现 循环次数改变了
j:=7;
k:=1.13;
for i:= i to 5 do
begin
j:=i;
showmessage(inttostr(j));
end

end;
 
当 i,j,k 定义在过程中时
i:=4;
j:=7;
k:=1.13;
i,j,k 不能赋值 ,你可以设置 watch 观察一下
 
过程中变量的值不正确是编译器优化造成的。不会影响最终结果。

你可以试试
for i:=0 to 20 do
xxx;
设置watch观察你会发现i的值是从20开始的。
 
procedure TForm1.Button1Click(Sender: TObject);
var
i,j:integer;
k:real;

begin
i:=1
//在这里该变i的值 你会发现 循环次数改变了
j:=7;
showmessage(inttostr(j))
//j:=7
j:=8;
showmessage(inttostr(j))
//j:=8

k:=1.13;
for i:= i to 5 do
begin
j:=i;
showmessage(inttostr(j));
end


end;
 
这是Delphi编译优化的结果,
因为你对 i,j,k赋值,在过程中再也没有引用i,j,k,
因此赋值没有任何作用,编译器就自动把
i:=4;
j:=7;
k:=1.13;
删除了,你用watch当然看不到
至于全局变量,编译器无法知道其他引用的过程或单元是否会
引用该变量,就不会"优化"
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
916
SUNSTONE的Delphi笔记
S
后退
顶部