我定义了一个TStack的对象,在程序中想使用它,却发现有以下问题:var
   mystack:TStack;
   index:Integer;
   temp:^Integer;begin
   mystack.Create;
    index:=0;
    mystack.push(@index);
    index:=100;
    mystack.push(@index);
    index:=20;
    temp:=mystack.pop;
    Showmessage(Inttostr(temp^));//此处应该显示100,但是我看到的是20?
    temp:=mystack.pop;
    Showmessage(Inttostr(temp^));
    //此处应该显示0,但是我看到的仍然是100!?
   
     此外:如果我要将一个TreeNode压栈,该如何操作!!
    
end; 

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      tmp:TStack;
    begin
      tmp:=Tstack.Create ;
      tmp.Push(pchar('cc'));
      tmp.Push(pchar('dd'));
      showmessage(pchar(tmp.Pop));
      showmessage(pchar(tmp.Pop));
      tmp.Free ;
    end;
      

  2.   

    mystack.Create;应该改为:
    mystack := TStack.Create;1、Showmessage(Inttostr(temp^));//此处应该显示100,但是我看到的是20?
    因为TStack保存的是指针,而你的“index:=20;”已经让指针的内容为20了而不是1002、Showmessage(Inttostr(temp^));
        //此处应该显示0,但是我看到的仍然是100!?
    此处还是20而不是100也不是0。因为你Push的都是@index,指针指向同一个数据index。而你已经让:index:=20。—————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    —————————————————————————————————
      

  3.   

    同意lxpbuaa(桂枝香在故国晚秋)