CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

帮我看一下这个数组的传递在哪里出错了?

楼主cbcool(醉眼观花)2005-04-05 09:34:10 在 Delphi / VCL组件开发及应用 提问

unit   Unit1;  
   
  interface  
   
  uses  
      Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,  
      Dialogs,   ComCtrls,   StdCtrls,   ExtCtrls;  
   
  type  
      TValue   =   Record  
          str1:   string;  
          Int:   integer;  
          str2:   string;  
          str3:   string;  
      End;  
      PValue   =   ^TValue;  
      AValue   =   Array   Of   PValue;  
   
      TForm1   =   class(TForm)  
          TreeView:   TTreeView;  
          Panel1:   TPanel;  
          Button1:   TButton;  
          Button2:   TButton;  
          Button3:   TButton;  
          procedure   Button1Click(Sender:   TObject);  
          procedure   Button3Click(Sender:   TObject);  
          procedure   Button2Click(Sender:   TObject);  
      private  
          {   Private   declarations   }  
          procedure   AddArray(Var   List:   TList);  
          function   GetValue:   AValue;  
      public  
          {   Public   declarations   }  
      end;  
   
  var  
      Form1:   TForm1;  
      List:   TList;  
   
  implementation  
   
  {$R   *.dfm}  
   
  procedure   TForm1.AddArray(var   List:   TList);  
  Var  
      i:   integer;  
      ArrayValue:   Array   Of   PValue;  
  begin  
      SetLength(ArrayValue,4);  
      For   i   :=   0   To   3   Do  
      Begin  
              New(ArrayValue[i]);  
              ArrayValue[i]^.str1   :=   'aaa'   +   IntToStr(i);  
              ArrayValue[i]^.str2   :=   'bbb'   +   IntToStr(i);  
              ArrayValue[i]^.str3   :=   'ccc'   +   IntToStr(i);  
      End;  
      IF   Assigned(List)   Then   List.Destroy;  
      IF   Not   Assigned(ArrayValue)   Then   Raise   Exception.Create('Null   of   ArrayValue');  
      List   :=   TList.Create;  
      List.Add(ArrayValue);  
      ShowMessage('The   ArrayValue   has   Add   into   List   Item');  
  end;  
   
  procedure   TForm1.Button1Click(Sender:   TObject);  
  begin  
      AddArray(List);  
  end;  
   
  procedure   TForm1.Button3Click(Sender:   TObject);  
  begin  
  //  
  end;  
   
  procedure   TForm1.Button2Click(Sender:   TObject);  
  Var  
      a:   AValue;  
      i:   integer;  
  begin  
      a   :=   GetValue;  
      For   i   :=   Low(a)   To   High(a)   Do  
      Begin  
          ShowMessage(a[i]^.str1);//这里取数据不出来,为什么?  
      End;  
  end;  
   
  function   TForm1.GetValue:   AValue;  
  begin  
      Result   :=   Nil;  
      IF   Not   Assigned(List)   Then   Exit;  
      Result   :=   List.Items[0];  
  end;  
   
  end.  
   
  我把ArrayValue数组加到List中,然后通过GetValue取出来,但是取出来的没数据,为什么呢?谢谢! 问题点数:100、回复次数:10Top

1 楼cbcool(醉眼观花)回复于 2005-04-05 09:54:45 得分 0

Help~Top

2 楼heluqing(鉴之小河〖劳累求充实〗)(vcl .net)回复于 2005-04-05 09:58:13 得分 5

up...Top

3 楼heluqing(鉴之小河〖劳累求充实〗)(vcl .net)回复于 2005-04-05 10:08:36 得分 5

button1click中的ArrayValue:   Array   Of   PValue;  
  定义成全局变量....Top

4 楼gzmhero(hihihi)回复于 2005-04-05 10:10:31 得分 30

楼主好象是把一个数组作为一个Item放到List中的。  
  List中只能放指针,而你这里放的是一个动态数组,所以取不出来东西,给你修改一下:  
   
  type  
      TValue   =   Record  
          str1:   string;  
          Int:   integer;  
          str2:   string;  
          str3:   string;  
      End;  
      PValue   =   ^TValue;  
      AValue   =   Array   Of   PValue;  
      PAValue=^AValue;///////////////定义一个指向AValue的指针  
  ..............  
      private  
          procedure   AddArray(Var   List:   TList);  
          function   GetValue:   PAValue;////////函数返回修改为一个PAValue指针  
  ...........  
   
  procedure   TForm1.AddArray(var   List:   TList);  
  Var  
      i:   integer;  
      PV:PAValue;  
  begin  
      new(PV);  
      SetLength(PV^,4);  
      For   i   :=   0   To   3   Do  
      Begin  
              New(PV^[i]);  
              PV^[i]^.str1   :=   'aaa'   +   IntToStr(i);  
              PV^[i]^.str2   :=   'bbb'   +   IntToStr(i);  
              PV^[i]^.str3   :=   'ccc'   +   IntToStr(i);  
      End;  
      List   :=   TList.Create;  
      List.Add(PV);  
  end;  
   
  ..............  
  procedure   TForm1.Button2Click(Sender:   TObject);  
  Var  
      PV:PAValue;  
      i:   integer;  
  begin  
      PV   :=   GetValue;  
      ShowMessage(PV^[0]^.str1);//能够得到PV^[i]^.str1值  
  ..............  
   
  function   TForm1.GetValue:   PAValue;/////返回为PAValue  
  begin  
      Result   :=   Nil;  
  ..............  
      Result   :=   List.Items[0];  
  end;  
  Top

5 楼heluqing(鉴之小河〖劳累求充实〗)(vcl .net)回复于 2005-04-05 10:24:02 得分 5

List.Add(ArrayValue);  
  ///这句话只执行完毕之后list仍然是空的...  
  for   I:=0   to   3   do  
  list.Add(arrayvalue[I]);Top

6 楼heluqing(鉴之小河〖劳累求充实〗)(vcl .net)回复于 2005-04-05 10:29:15 得分 5

gzmhero(hihihi)   老大  
  这样为什么不行?  
  for   I:=0   to   3   do  
  list.Add(arrayvalue[I]);Top

7 楼beyondtkl(大龙驹<*好久没来了,兄弟们好吧。*>)回复于 2005-04-05 10:31:41 得分 20

代碼很亂。。。。  
  比如:  
   
      IF   Assigned(List)   Then   List.Destroy;   很少直接這樣寫的 雖然也沒錯  
   
  我以前測試過   
      你把TList對象作為函數參數傳遞 然後在函數中.Add,到一定程度時會出錯的。。。  
  Top

8 楼gzmhero(hihihi)回复于 2005-04-05 10:31:56 得分 5

heluqing(鉴之小河〖挣大钱娶美女〗)   (   )   信誉:100    
   
  这样也可以的,但是楼主的要求可能不是把每个元素作为一个Item放到列表里。  
  应该是将一个数组做为一个元素放到List中。Top

9 楼heluqing(鉴之小河〖劳累求充实〗)(vcl .net)回复于 2005-04-05 10:39:56 得分 5

gzmhero(hihihi)   (   )   信誉:105    
  那么说这样也行了  
      List.Add(@ArrayValue);  
  但是我这么做了之后,list还是()没有任何值添加进去了,可能真的如  
  beyondtkl(大龙驹<干掉小日本>)   (   )   信誉:116   所说  
    你把TList對象作為函數參數傳遞 然後在函數中.Add,到一定程度時會出錯的。。。  
  真的是这样吗?  
  我的没有添加上...Top

10 楼gzmhero(hihihi)回复于 2005-04-05 10:49:22 得分 20

heluqing(鉴之小河〖挣大钱娶美女〗)   (   )   信誉:100    
   
    List.Add(@ArrayValue);  
  这样也可以的。但   ArrayValue:   Array   Of   PValue;要是全局变量才行。  
  然后取出的时候要  
   
  function   TForm1.GetValue:   APValue;  
   
  才行。因为List中的是指针。Top

相关问题

  • 数组的问题!帮忙看一下!
  • 脚本出错,帮我看一下吧!
  • 请帮忙看一下出错原因
  • 代码出错,帮忙查看一下
  • 那位老大帮看一下,很菜的数组问题...
  • 有关数组的一个小问题。请看一下。
  • 遇到一个数组问题,大家帮忙看一下!
  • 为数组赋值出错!
  • 数组传递问题
  • 向函数传递数组

关键词

  • 指针
  • 信誉
  • arrayvalue
  • 数组
  • pavalue
  • pv
  • tlist
  • avalue
  • tvalue
  • tform

得分解答快速导航

  • 帖主:cbcool
  • heluqing
  • heluqing
  • gzmhero
  • heluqing
  • heluqing
  • beyondtkl
  • gzmhero
  • heluqing
  • gzmhero

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo