procedure TForm1.btn1Click(Sender: TObject);
var
  Local_Int: Integer;  //声明了两个局部变量
  Local_Tmp: Integer;
begin
  ShowMessage(IntToStr(Local_Tmp));  //显示为一个随机数
  ShowMessage(IntToStr(Local_Int)); //显示为 0
  if @Local_Int <> nil then
    ShowMessage('Local_Int已经分配了内存,且初始化为 ' + IntToStr(Local_Int)); //显示已经分配了内存,并且初始化为 0
end;
按道理来说,局部变量不自动初始化,而是一个随机数,结果在第二个ShowMessage中却显示为 0 ???
为什么呢???请高手解答!!!

解决方案 »

  1.   

    真的不是运气,你可以在delphi7中自己尝试一下就可以了。确实是0
      

  2.   

    别抬杠了,那就是个随机数。procedure TForm1.btn1Click(Sender: TObject);
    var
      Local_Int: Integer;  //声明了两个局部变量
      Local_Tmp: Integer;
    begin
      ShowMessage(IntToStr(Local_Tmp));  //显示为一个随机数
      ShowMessage(IntToStr(Local_Int)); //显示为 0
      if @Local_Int <> nil then
        ShowMessage('Local_Int已经分配了内存,且初始化为 ' + IntToStr(Local_Int)); //显示已经分配了内存,并且初始化为 0
    end;
    在你不添加其他代码的情况下,这个函数无论运行多少次, local_int 和 local_tmp 的值都不会变的。
      

  3.   


    只要不添加以下代码就不会为0  if @Local_Int <> nil then 
        ShowMessage('Local_Int已经分配了内存,且初始化为 ' + IntToStr(Local_Int)); //显示已经分配了内存,并且初始化为 0 
    一但添加了这个,就老是Local_Int初始化为0,而不是随机数,每次运行都是这样的???编译器的原因么?
      

  4.   

    在Delphi当中所有非指针和Class类型,都允许自动构造,自动构造的意思就是不需要你写代码,编译器就帮你做了内存分配和释放的工作。
    var
    Local_Int: Integer;这样子的定义:
    if @Local_Int <> nil then //这个条件就是一个“永假”条件后面的ShowMessage永远不会被执行。
    至于初始化的值,这个是不确定的,因为这是一个栈空间,只是在更多的情况下会是一个0值。
      

  5.   


    if @Local_Int <> nil then //这个条件就是一个“永假”条件后面的ShowMessage永远不会被执行。
    楼上的大哥,这个语句是True条件,后面的ShowMessage永远都会运行,因为Local_Int肯定已经分配了内存,只要分配了内存,@Local_Int指向肯定不是nil了。至于为什么每次Local_Int都是0的疑问继续…………思考和寻求答案中……
      

  6.   

    刚刚重启了电脑,还把projects文件夹下的临时文件删掉,然后启动delphi,再新建一个工程,粘贴那段代码......
    那两个随机数,还是没有变
      

  7.   

    这个是delphi跟其他语言不同的地方,我认为就是编译器的事情,与其他语言大不一样的地方在delphi中多的要命
      

  8.   

    if @Local_Int <> nil then 
        ShowMessage(IntToStr(Local_Int)); //显示已经分配了内存,并且初始化为 0 把前面的字符串去掉,就不是0了
      

  9.   

    if @Local_Int <> nil then
    编译器优化的问题。
      

  10.   

    抱歉,说反了,这是一个永真的条件。
    @Local_Int这样子去测试任何一个变量都永真的。
      

  11.   

    我想也许就是Delphi特有的编译器优化的作用吧!
    还是想请高手解答这个问题,呵呵……