procedure TForm1.Button1Click(Sender: TObject);
var
  i,j:Integer ;
  a:array[1..3,1..4] of integer ;
  b:^Integer;
begin
   for i:=1 to 3 do
       for j:=1 to 4 do
       begin
         a[i,j]:=4*(i-1)+j;
       end;
  b:=   @a[1,1];
  inc(b,4*(4*(3-1)+(2-1)));
  ShowMessage(IntToStr(b^));
 // b:=b+  4*(4*(3-1)+(2-1)); // ( @a[1,1]+4*(4*(3-1)+(2-1)) )^;
end;想获取A[3,2]的,但是没得到

解决方案 »

  1.   

    Inc会根据指针所指向的数据类型使用正确的步长,所以最左边的4*不需要。
      

  2.   

    inc(b,4*(4*(3-1)+(2-1)));
    這句有問題,如注掉這句可以得到正確結果,也就是數組第一個元數的值。
      

  3.   

    本帖最后由 bdmh 于 2010-10-10 14:40:15 编辑
      

  4.   

    Inc会根据指针类型来使用正确的步长,如:
    Inc(PByte, 1)是移动一个字节
    Inc(PInteger, 1)是移动4字节
    你现在的指针是b:^Integer,它的步长就是4字节的,因此你不要*4了。
      

  5.   

    学习,upupupupupupupupupupupupupupupupupup
      

  6.   

    说到这里我还想起有时候坐车上来个硬盘买票员/司机叫他买票"没钱""我就是不买怎么样"司机买票员也不敢怎么样上海人是他吗的弱势