• 结构化指针和单字节指针的区别


    type

      PTCsRc = ^TCsRc;
      TCsRc = record
        ID:Word;
        Count:Integer;
      end;

      TForm1 = class(TForm)
        Memo1: TMemo;
        Button1: TButton;
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
      private
        FP:PTCsRc;
        FB:PAnsiChar;
        FPDestroy:PAnsiChar;
      public
        { Public declarations }
      end;

    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Memo1.Clear;
      GetMem(FB,SizeOf(TCsRc) * 3);
      FPDestroy := FB;
    end;


    procedure TForm1.FormDestroy(Sender: TObject);
    begin
      FreeMem(FPDestroy);
      FPDestroy := nil;
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    var
      I:Integer;
      nCs:TCsRc;
      nP:PAnsiChar;
    begin
      nP := FB;
      FP := @FB[0];//也可以强制转换:PTCsRc(FB)
      for I := 0 to 3 - 1 Do begin
        FillChar(nCs,SizeOf(TCsRc),0);
        With nCs Do begin
          ID := I;
          Count := SizeOf(TCsRc) + I;
        end;
        Move(nCs,FB^,SizeOf(TCsRc));
        Inc(FB ,SizeOf(TCsRc) );  //这里需要加上结构大小
        Memo1.Lines.Add(Format('%d',[nCs.ID]));
        Memo1.Lines.Add(Format('%d',[nCs.Count]));
        Memo1.Lines.Add('========');

      end;

      for I := 0 to 3 - 1 Do begin
        FillChar(nCs,SizeOf(TCsRc),0);
        Move(nP^,nCs,SizeOf(TCsRc));
        Memo1.Lines.Add(Format('%d',[nCs.ID]));
        Memo1.Lines.Add(Format('%d',[nCs.Count]));
        Memo1.Lines.Add('***********');

        Inc(nP,SizeOf(TCsRc));  //这里需要加上结构大小
      end;

      for I := 0 to 3 - 1 Do begin
        FillChar(nCs,SizeOf(TCsRc),0);
        Move(FP^,nCs,SizeOf(TCsRc));
        Memo1.Lines.Add(Format('%d',[nCs.ID]));
        Memo1.Lines.Add(Format('%d',[nCs.Count]));
        Memo1.Lines.Add('-----------');

        Inc(FP);   //结构指针这里直接增加
      end;
    end;

  • 相关阅读:
    牛客网分糖果
    【bzoj3717】[PA2014]Pakowanie 状压dp
    【bzoj1042】[HAOI2008]硬币购物 背包dp+容斥原理
    [POI2007]堆积木Klo
    【bzoj5018】[Snoi2017]英雄联盟 背包dp
    BZOJ 1492 [NOI2007]
    bzoj 2741 [FOTILE模拟赛] L
    bzoj 1486 最小圈
    计数
    cf 700
  • 原文地址:https://www.cnblogs.com/GameDelphi/p/12746209.html
Copyright © 2020-2023  润新知