A1:array of string;
A2:array of string;这样两个数组,如何将A1的值完全赋值给A2?我这样做,但是在关闭时报错A1:array of string;
A2: Array of String;
i,n:Integer;
begin
  setlength(A1,5);
  A1[0]:='1';
  A1[1]:='2';
  A1[2]:='2';
  A1[3]:='2';
  A1[4]:='4';
  n:=High(A1);
  Edit1.Text :=IntTostr(n);
  Edit2.Text :=A1[4];  Setlength(A2,n);
   For i:=n downto 0 Do
   A2[i]:=A1[i];

解决方案 »

  1.   

    用move(A[i], B[i], 5)试试!
      

  2.   


    //Delphi 帮助!
    Copying arrays 
     When copying single dimension arrays, we can use the Copy routine. It allows us to copy all or part of one array to another, as in this example:
       
      var 
       i : Integer;
       Source, Target : array of Integer;
     
     begin
       SetLength(Source, 8);
     
       for i := 1 to 8 do   // Build the dynamic source array
         Source[i-1] := i;   // Remember that arrays start at index 0
     
       Target := Copy(Source, 3, 4);
     
       for i := 0 to Length(Target) -1 do   // Display the created array
         ShowMessage('Target['+IntToStr(i)+'] : '+IntToStr(Target[i]));
     end;
      

  3.   

    我就不明白,明明A1你是5个元素,为什么Setlength(A2,n); 
    n的值你知道是多少不?数组元素是从0开始的。所以,你这样A2的元素只有四个
      

  4.   

      SetLength(a1,5);
      a1[0]:=1;
      a1[1]:=2;
      a1[2]:=3;
      a1[3]:=4;
      a1[4]:=5;
      SetLength(a2,5);
      a2:=a1;
      

  5.   

    少了一个
    HIGH(A1)是四, 
    Setlength(A2,n) 应该是5
      

  6.   

    SetLength(A2,High(A1));
    CopyMemory(@A2,@A1,sizeof(Byte)*High(A1));
      

  7.   

    procedure TForm1.Button2Click(Sender: TObject);
    var
    A1:array of string;
    A2: Array of String;
    i,n:Integer;
    begin
      setlength(A1,5);
      A1[0]:='1';
      A1[1]:='2';
      A1[2]:='2';
      A1[3]:='2';
      A1[4]:='4';
      n:=High(A1);
      Edit1.Text :=IntTostr(n);
      Edit2.Text :=A1[4];  Setlength(A2,n);
      Move(A1,A2,n);
      For i:=0 to high(a2) Do
        memo1.Lines.Add(a2[i]);
    end;
      

  8.   

    Quote=引用楼主 fishyu10 的帖子:]
    A1:array of string; 
    A2:array of string; 这样两个数组,如何将A1的值完全赋值给A2? 我这样做,但是在关闭时报错 A1:array of string; 
    A2: Array of String; 
    i,n:Integer; 
    begin 
      setlength(A1,5); 
      A1[0]:='1'; 
      A1[1]:='2'; 
      A1[2]:='2'; 
      A1[3]:='2'; 
      A1[4]:='4'; 
      n:=High(A1); 
      Edit1.Text :=IntTostr(n); 
      Edit2.Text :=A1[4];   Setlength(A2,n); 
      For i:=n dow…
    [/Quote]
    你这里的n是变量么?如果是放在循环里都会报错吧,
    你可以这样写
    A1:array of string; 
    A2: Array of String; 
    i,n:Integer; 
    begin 
      n := 5;
      setlength(A1,n); 
      A1[0]:='1'; 
      A1[1]:='2'; 
      A1[2]:='2'; 
      A1[3]:='2'; 
      A1[4]:='4'; 
      n:=High(A1); 
      Edit1.Text :=IntTostr(n); 
      Edit2.Text :=A1[4];   Setlength(A2,n); 
      For i:=n downto 0 Do 
      A2[i]:=A1[i]; 
      

  9.   

    Move是高效的,执行速度快。 
    Move是危险的,不做任何检查和转换。
      

  10.   

    如果A1,A2都是局部变量就是没有问题的但A2换成全局的,把A1赋值给A2就会报错

    至于2楼说的知道A1的长度,这只是我举的一个例子,实际应用时不是确定的
      

  11.   

    你的代码实测无任何错误。DELPHI 5.0,完整代码如下:unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;type
      TForm1 = class(TForm)
        Edit1: TEdit;
        Edit2: TEdit;
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
        procedure TESTArr();
      end;var
      Form1: TForm1;implementation{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject);
    begin
      TESTArr();
    end;procedure TForm1.TESTArr();
    var
      A1: array of string;
      A2: array of String;
      i,n:Integer;
    begin
      SetLength(A1,5);
      A1[0]:='1';
      A1[1]:='2';
      A1[2]:='2';
      A1[3]:='2';
      A1[4]:='4';
      n:=High(A1);
      Edit1.Text :=IntTostr(n);
      Edit2.Text :=A1[4];  SetLength(A2,n);
      For i := n downto 0 Do
      A2[i] := A1[i];
    end;end.