比如C中可有如下代码,但如何在delphi下实现:
....
int *p, *pp;
....
p=malloc(...);
pp=p+1;
....
pp[-1]=...;

解决方案 »

  1.   

    var
    p,pp:^integer;
    i:integer;new(p);
    new(pp);//自动
    p:=&i;//I的地址dispose(p);
    dispose(pp);
      

  2.   

    拜托请先看清楚问题。pp=p+1,在delphi中好像不能进行这样的操作
      

  3.   

    方法1:
    var
      p,pp:PInteger;
    begin
      GetMem(p,n);
      pp:=PInteger(Integer(p)+SizeOf(Integer));
    end;
    方法2:
    var
      p,pp:^Integer;
    begin
      GetMem(p,n);
      pp:=p;
      Inc(pp);
    end;
      

  4.   

    var
      p,pp : ^Integer;
    begin
      New(p);
      new(pp);
      p^ := 1;
      pp := p;
      ShowMessage(IntToStr(p^));
      ShowMessage(IntToStr(pp^));
      

  5.   

    var
      p,pp : ^Integer;
    begin
      New(p);
      new(pp);
      p^ := 1;
      pp := p;
      ShowMessage(IntToStr(p^));
      ShowMessage(IntToStr(pp^));
      Dispose(p);
      Dispose(pp);
      

  6.   

    var
      p,pp : ^Integer;
    begin
      try
        New(p);
        new(pp);
        p^ := 1;
        pp := p;
        ShowMessage(IntToStr(p^));
        ShowMessage(IntToStr(pp^));
      finally
        Dispose(p);
        Dispose(pp);
      end;
      

  7.   

    不知在分配内存后,p可不可以这样存取:p[x]:=..,好像delphi中不行
      

  8.   

    inc(p)  =  c中的 p++
    dec(p)  =  c中的 p--
      

  9.   

    关键是我想在分配指针后用数组的方式存取,比如:
    //c version
    ....
    int *p, *pp;
    ....
    p=malloc(...);
    pp=p+1;
    ....
    pp[-1]=...;//**like this**
    //////////////
    在delphi中这样的操作好像不允许,不只如何解决
      

  10.   

    pp:=PInteger(Integer(p)+SizeOf(Integer));
    PInteger(Integer(pp)+SizeOf(Integer)*(-1))^:=.....
      

  11.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      I, II: PInteger;
    begin
      GetMem(I, Sizeof(Integer) * 10);              // p=malloc(...);
      II := SysReallocMem(I, Sizeof(Integer) * 1);  // pp=p+1;
      FreeMem(I);
    end;
      

  12.   

    晚些时候我会结帖的,虽然有点遗憾,delphi的指针要是能像c中那样可以以数组方式存取就方便了。
      

  13.   

    只有 PChar 类型才能象数组一样操作
      

  14.   

    还是不甘心,换一种问法:delphi是否允许把一个数组的地址副给另一个数组,然后再这样存取:
    pp=p+1;
    pp[-1]=...;
      

  15.   

    procedure TForm1.Button1Click(Sender: TObject);
    type
     TArray=array of Integer;
    var
      p:PInteger;
      a:TArray;
      i:Integer;
    begin
      GetMem(p,10*SizeOf(Integer));
      a:=TArray(p);
     for i:=1 to 10 do
      begin
        p^:=i;
        Inc(p);
      end;  for i:=1 to 10 do
      begin
        ShowMessage(Inttostr(a[i-1]));
      end;
       a:=nil;
     //FreeMem(p);
    end;不能确定是否有内存泄漏:)