我相信在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消息循环中)之间重复使用用于的内存位置,并且总是会重置它达到您所看到的价值.
kjack,
它包含当时堆栈帧中的任何值.在你的情况下,这将是发件人.如果您将整数和类型转换为对象,您将注意到"模式".
procedure TForm1.Button1Click(Sender: TObject); var int1 : integer; begin ShowMessage(TObject(int1).ClassName); showmessage(inttostr(int1)) ; int1 := 3; end; end.
首先,你是正确的,没有初始化局部变量.
此外,您无法保证int1
在每次调用时都存储在相同的内存位置.在这种情况下,它可能是你所看到的相同值每次都是因为它的原因是使用相同的位置(偶然),但德尔福编译器优化掉你的最后
int1 := 3;
声明,因为它没有效果.(您可以showmessage(inttostr(int1))
在该行之后添加另一个调用,看看是否会产生影响.)另一种可能性是,int1
在调用您的按钮处理程序(例如在Windows消息循环中)之间重复使用用于的内存位置,并且总是会重置它达到您所看到的价值.