对delphi的指针不熟,请问如下所示的c代码的等价delphi形式是什么样的?byte *a;
byte *b;......//初始化a,bfor(i=0;i<10;i++){
*(a+i)=*(b+2*i);
}写成delphi形式大概是怎么样的?

解决方案 »

  1.   

    var
    a: Pointer;  // 或者任何其他指针类型
    begin
    GetMem(a, 10); // 分配10字节
    PInteger(a)^ := Integer(Form1);  // 将form1(其实Delphi中所有的类都可以认为是指针)
                                  // 保存到a[0..3]中
                                  // 这里是和C的区别, Delphi中需要进行指针类型转换,
                                  // 主要是为了"欺骗"编译器, 免得程序无法编译通过.
    (PChar(a)+SizeOf(Integer))^ := 'B'; // a[4]中保存一个字符'B'
    .... 
      

  2.   

    var
      P: ^Integer;
      X: Integer;
    begin
      P := @X;
      X := 10;
      P^ := 20; 如果定义了一个指针P,那么P表示指针所指向的内存地址,而P^表示内存所存储的实际内容。因此,在上面的代码中, P^ 与X相等请问上例中指针P^是表示存储的内容,P是内存地址怎么理解,如果我要用指针改变X的值,是p:=2 还是p^:=2
    在具体开发中,指针一般基什么情况下使用!
    请教了.要用指针改变X的值用p^:=2
    指针就是内存的地址,是间接访问数据的手段。主要有两中用途:1,做为传递地址 2 构造有意义的数据收集结构。
    实际开发的时候指针用途很多的,比如调用API的时候就经常用到。
      

  3.   


    Integer(P): 可以得到指针地址.要改变指针内容肯定是: P^ := 2;
      

  4.   

    我写成
    a:pbyte
    b:pbyte;(a+1)^:=(b+1)^编译出错
      

  5.   

     E2015 Operator not applicable to this operand type
      

  6.   


    procedure TForm1.Button2Click(Sender: TObject);
    var
      a:pbyte;
      b:pbyte;
      i:integer;
    begin
      new(a);
      new(b);
      for i:=0 to 9 do
      begin
        a^:=b^;
        inc(a);
        inc(b,2);
      end;
      dispose(a);
      dispose(b);
    end;
      

  7.   

    不是,我的a和b这两个指针应该不需要new的。
    因为a和b是初始化是制定到别的地方去了类似与这种
    a:=@...
    b:@...然后才是(a+1)^:=(b+3)^但就是编译不过。
      

  8.   

    delphi不支持(a+1)^:=(b+3)^
    必须这样写
    inc(a);
    inc(b,3)
    a^:=b^;