动态数组本身的长度是未知的,本质上认为,动态数组就是一个指针。
他的长度在你setlength(arr,n)的时候才被设置,相当于给动态数组申请一段内存空间,空间大小为sizeof(double) * n。这里面的pop是一个指针,指向另一个指针(动态数组),而且为对其申请空间也未将其指向某个内存地址(动态数组)。那pop^是未定义的。对一个未定义的东西,还要来一下setlength,这是什么意思?

解决方案 »

  1.   


    pop: pDoubleArray;
    popdest:   TDoubleArray 
    setlength(popdest,M*D);
    pop := @popdest;
      

  2.   

    a:array of char 动态数组 a 和 @a[0]等价。动态数组名a是一个指针,是数组首地址。b:array[0...99] of char 静态数组 @b 和 @b[0]等价。静态数组名b是一个变量,是数组首元素的值b[0]
      

  3.   

    procedure TForm1.Button1Click(Sender: TObject);
    type
      TDoubleArray = array of Double;  // 定义动态数组类
      PDoubleArray = ^TDoubleArray;    // 定义指向动态数组的指针
    var
      A:TDoubleArray;                  // 声明动态数组的变量
      pop: pDoubleArray;               // 声明动态数组指针的变量
      M,D:integer;                     // 声明决定动态数组大小的变量
    begin
      M:=12;                            
      D:=11;                           
      setlength(A,M*D);                // 设置动态数组A的长度
      pop:=@A;                         // 将动态数组A的地址引入 Pop指针变量  
    end;上述代码运行正常,可以说明你的问题了。