unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;type
  TForm1 = class(TForm)
    mmo1: TMemo;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}function abc(aa: array of byte): integer;
var
  i: integer;
begin
  for i := 0 to high(aa) do
    form1.mmo1.Lines.add(inttostr(aa[i]));
end;function cba(aa: array of char): integer;
var
  i: integer;
begin
  for i := 0 to high(aa) do
    form1.mmo1.Lines.add(aa[i]);
end;procedure TForm1.FormCreate(Sender: TObject);
var
  aa: array of byte;
  ss: array of char;
  i: integer;
begin
  setlength(aa, 10);
  setlength(ss, 10);
  for i := 0 to 9 do
  begin
    aa[i] := i;
    ss[i] := chr(i);
  end;
  abc(aa);
  cba(ss); // Error: Array and dynamic array 为什么上一句通过, 这句不通过?
end;end.

解决方案 »

  1.   

    奇怪的编译错误。不过你这样写是不正确的。
    有一点需要记住,下面的函数声明,其参数类型并不是动太数组,而是普通数组。
    function abc(aa: array of byte): integer;程序修改如下
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;type
      TForm1 = class(TForm)
        Memo1: TMemo;
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
    type
      arrByte = array of byte;
      arrChar = array of char;
    implementation{$R *.DFM}
    function abc(aa: arrByte): integer;
    var
      i: integer;
    begin
      for i := 0 to high(aa) do
        form1.memo1.Lines.add(inttostr(aa[i]));
    end;function cba(aa: arrChar): integer;
    var
      i: integer;
    begin
      for i := 0 to high(aa) do
        form1.memo1.Lines.add(aa[i]);
    end;procedure TForm1.FormCreate(Sender: TObject);
    var
      aa: arrByte;
      ss: arrChar;
      i: integer;
    begin
      setlength(aa, 10);
      setlength(ss, 10);
      for i := 0 to 9 do
      begin
        aa[i] := i;
        ss[i] := chr(i);
      end;
      abc(aa);
      cba(ss);
    end;end.
      

  2.   

    发现新大陆了。function abc(aa: array of byte): integer;其参数既可以接受静态数组,也可以接受动态数组。
      

  3.   

    1.如果把你的那个SS定义为STRING,相应的函数CBA()的参数也定义为STRING,则可以运行的,我想这个原因可能因为tMEMO.LINES类型为STRING的.
    2.如果用CHAR类型的话,你可以这样定义:TYPE TDynamicCharArray= ARRAY OF CHAR,function cba(aa: TDynamicCharArray): integer;然后SS:TDynamicCharArray,这样就可以了,但是运行的时候TMEMO里面显示 的是空白,也就是说有了10行空白行.我想原因参见上面一条.
      

  4.   

    呵呵,原来是这样使用的啊, 多谢“ahjoe(强哥)” :)暂未结贴,看有没有更深入的解释 ^_^