程序片断如下:
1   var
2     p:^integer;
3     q:^integer;
4   begin
5     getmem(p,sizeof(integer)*10);
6     q:=p;
7   end;编译无法通过,提示第6行错,错误信息:imcompatible types,我想把q指向刚分配过的内存空间,为何不能通过 q:=p这样的语句进行赋值呢?

解决方案 »

  1.   

    var
    2     q,p:^integer;
    3    
    4   begin
    5     getmem(p,sizeof(integer)*10);
    6     q:=p;
    7   end;就可以了
      

  2.   

    两个^integer;
    delphi 不认为是一样的;
    要这样
    type
      pint=^integer;
    var
    q:pint;
    p:pint;
    begin
    //
    end;
    也可以。
      

  3.   

    谢过两位了,我试了一下都可以的,非常感谢,还有一点想请教一下程序片断:const 
      MAX_DIAGONAL = $FFFFFF;type
      PDiagVectorArray = ^TDiagVectorArray;
      TDiagVectorArray = array [-MAX_DIAGONAL .. +MAX_DIAGONAL] of integer;
      PIntArray = ^TIntArray;
      TIntArray = array[1..(MAXINT div sizeof(integer))] of integer;...
    ...
    ...func1(MAXD:Integer);
    var
            IntArr_f, IntArr_b: PIntArray;
            diagVecB,diagVecF: PDiagVectorArray;
    bgin
        GetMem(IntArr_f, sizeof(integer)*(MaxD*2+1));
        GetMem(IntArr_b,sizeof(integer)*(MaxD*2+1)); pchar(diagVecF) := pchar(IntArr_f) - sizeof(integer)*(MAX_DIAGONAL-MaxD);
             pchar(diagVecB) := pchar(IntArr_b) - sizeof(integer)*(MAX_DIAGONAL-MaxD); ...
    ...
    end;再后面程序diagVecF就可以通过数组下标存取数据了,比如diagVecF[i] := x; 偶实在想不通,diagVecF,diagVecB并没有为其分配空间嘛,虽说IntArr_f和IntArr_b分配了空间,但
    pchar(diagVecF) := pchar(IntArr_f) - sizeof(integer)*(MAX_DIAGONAL-MaxD);这个语句什么意思将diagVecF指针指向???区域,sizeof(integer)*(MAX_DIAGONAL-MaxD)肯定是一个很大的数(MaxD很小,比如说3),pchar(IntArr_f) - sizeof(integer)*(MAX_DIAGONAL-MaxD)是一个什么结果啊?
    diagVecF经过这样赋值居然还可以diagVecF[i] := x?! 郁闷,实在难解。请教请教
      

  4.   

    pchar本来就是指针类型的;将一个指针变量赋值为另一个指针的内容,自然就取得那个指针的内容了。这就比如你把一把钥匙复制成另一把钥匙,自然可以打开另一把钥匙能打开的房间了。