当前位置:  开发笔记 > 开发工具 > 正文

delphi中的变量初始值

如何解决《delphi中的变量初始值》经验,为你挑选了2个好方法。

我相信在delphi中局部整数变量没有初始化为零.初始值是在该存储器位置发生的任何事情.因此,在第一次单击按钮时,下面的代码中,第一条消息显示整数值.为什么第二次点击它不会显示3而是显示相同的整数值?每次单击按钮时,它都会继续显示相同的整数值.仅当我停止并重新启动程序时,该值才不同.3存储在哪里,因为看起来每次在同一程序运行中单击按钮时使用相同的内存位置?

procedure TForm1.Button1Click(Sender: TObject);

var
int1 : integer;

begin
   showmessage(inttostr(int1)) ;
   int1 := 3;
end;

end.

Lieven Keers.. 12

kjack,

它包含当时堆栈帧中的任何值.在你的情况下,这将是发件人.如果您将整数和类型转换为对象,您将注意到"模式".

procedure TForm1.Button1Click(Sender: TObject);

var
int1 : integer;

begin
   ShowMessage(TObject(int1).ClassName);
   showmessage(inttostr(int1)) ;
   int1 := 3;
end;

end.


Mark Pim.. 5

首先,你是正确的,没有初始化局部变量.

此外,您无法保证int1在每次调用时都存储在相同的内存位置.在这种情况下,它可能是你所看到的相同值每次都是因为它的原因使用相同的位置(偶然),但德尔福编译器优化掉你的最后

int1 := 3;

声明,因为它没有效果.(您可以showmessage(inttostr(int1))在该行之后添加另一个调用,看看是否会产生影响.)另一种可能性是,int1在调用您的按钮处理程序(例如在Windows消息循环中)之间重复使用用于的内存位置,并且总是会重置它达到您所看到的价值.



1> Lieven Keers..:

kjack,

它包含当时堆栈帧中的任何值.在你的情况下,这将是发件人.如果您将整数和类型转换为对象,您将注意到"模式".

procedure TForm1.Button1Click(Sender: TObject);

var
int1 : integer;

begin
   ShowMessage(TObject(int1).ClassName);
   showmessage(inttostr(int1)) ;
   int1 := 3;
end;

end.



2> Mark Pim..:

首先,你是正确的,没有初始化局部变量.

此外,您无法保证int1在每次调用时都存储在相同的内存位置.在这种情况下,它可能是你所看到的相同值每次都是因为它的原因使用相同的位置(偶然),但德尔福编译器优化掉你的最后

int1 := 3;

声明,因为它没有效果.(您可以showmessage(inttostr(int1))在该行之后添加另一个调用,看看是否会产生影响.)另一种可能性是,int1在调用您的按钮处理程序(例如在Windows消息循环中)之间重复使用用于的内存位置,并且总是会重置它达到您所看到的价值.

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有