有一动态数组a,和某一地址p
a:array of sometype;
p:pinteger;现在要a的首地址指向p
实现 @a[0]:=p;

解决方案 »

  1.   

    p := @a[0];
    p := addr(a[0]);
      

  2.   

    p指向a可以
    a指向p是不行的,但可以复制p指向的内容到a
      

  3.   

    动态数组尚未分配空间,
    应当是可以的相当于c中的
    a=p吧?
      

  4.   

    p指向a可以,a指向p是不行。前者是变量,后者不是。
      

  5.   

    你不要这样做,除非你多动态数组有充分的认识并且要控制好。
    动态数组是按照引用计数去管理其分配的内存的,他不是一个简单的指针变量,Delphi在处理动态数组的时候,在编译你的代码时,是会插入很多辅助代码的,因此不要轻易改变指向动态数组的变量的值。
    如果你想实现数组的方式访问你动态开辟的内存,你可以采用
    type
      SomeType = Integer;
      TSomeAry = array[0..1023] of sometype;
      PSomeAry = ^TSomeAry;procedure TForm1.Button1Click(Sender: TObject);
    var
      a: PSomeAry;
      p: PInteger;
    begin
      //先为P分配空间
      p := GetMemory(1024 * SizeOf(Integer));  a := PSomeAry(P);
      a^[0] := 100;
      a^[1] := 120;
      showMessage(IntToStr(p^));
      showMessage(IntToStr(PInteger(Integer(p) + 4)^));
      FreeMem(p);
    end;上面是一个简单的例子,可以让你动态分配的空间按照数组的方式去逐个访问