zoukankan      html  css  js  c++  java
  • Delphi指针自增的使用

    -----------开发环境 D7

      1 unit Unit1;
      2 
      3 interface
      4 
      5 uses
      6   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      7   Dialogs, StdCtrls;
      8 
      9 type
     10   TForm1 = class(TForm)
     11     Button1: TButton;
     12     Button2: TButton;
     13     Button3: TButton;
     14     Button4: TButton;
     15     Button5: TButton;
     16     Button6: TButton;
     17     procedure Button1Click(Sender: TObject);
     18     procedure Button2Click(Sender: TObject);
     19     procedure Button3Click(Sender: TObject);
     20     procedure Button4Click(Sender: TObject);
     21     procedure Button5Click(Sender: TObject);
     22     procedure Button6Click(Sender: TObject);
     23   private
     24     { Private declarations }
     25   public
     26     { Public declarations }
     27   end;
     28   RMyrecord=record
     29     RAge:Integer;
     30     RName:string[2];
     31   end;
     32   PMyRecord=^RMyrecord;
     33   
     34 var
     35   Form1: TForm1;
     36 
     37 implementation
     38 
     39 {$R *.dfm}
     40 
     41 procedure TForm1.Button1Click(Sender: TObject);
     42 var
     43   vP01,vP02:PMyRecord;
     44   i:Integer;
     45 begin
     46   i:=SizeOf(RMyRecord);
     47   GetMem(vP01,i*5);
     48 
     49   vP02:=vP01;
     50   vp01^.RAge:=1;
     51   vP01^.RName:='1';
     52   inc(vP01,1);
     53   vp01^.RAge:=2;
     54   vP01^.RName:='2';
     55   inc(vP01,1);
     56   vp01^.RAge:=3;
     57   vP01^.RName:='3';
     58 
     59   inc(vP01,1);
     60   vp01^.RAge:=4;
     61   vP01^.RName:='4';
     62 
     63   inc(vP01,1);
     64   vp01^.RAge:=4;
     65   vP01^.RName:='5';
     66   //ShowMessage(IntToStr(SizeOf(PMyRecord)));
     67   vP01:=vP02;
     68   ShowMessage(vP01^.Rname);
     69   inc(vP01,1);
     70   ShowMessage(vP01^.Rname);
     71   inc(vP01,1);
     72   ShowMessage(vP01^.Rname);
     73   inc(vP01,1);
     74   ShowMessage(vP01^.Rname);
     75   inc(vP01,1);
     76   ShowMessage(vP01^.Rname);
     77   
     78   FreeMem(vP02);
     79 end;
     80 
     81 procedure TForm1.Button2Click(Sender: TObject);
     82 var
     83   vP01,vP02:PString;
     84   v1,v2,v3,v4:string;
     85 begin
     86   ShowMessage(IntToStr(SizeOf(PString)));
     87   GetMem(vP01,4*4);
     88   FillChar(vP01^,4*4,#0); //初始化,为字符串填充空值;
     89   vP02:=vP01;
     90   v1:='00001';
     91   vp01^:=v1;
     92   //ShowMessage(vp01^);
     93 
     94   inc(vp01,1);
     95   v2:='00002';
     96   vp01^:=v2;
     97   //ShowMessage(vp01^);
     98 
     99   inc(vp01,1);
    100   v3:='00003';
    101   vp01^:=v3;
    102 
    103   inc(vp01,1);
    104   v4:='00004';
    105   vp01^:=v4;
    106 
    107   vP01:=vP02;
    108   ShowMessage(vp01^);
    109   inc(Integer(vp01),1); //这个坑,Integer(vp01)后再加1 和 inc(vp01,1) 不一样, inc(Integer(vp01),1)中vp01中的地址是加了1字节,inc(vp01,1)中vp01中的地址是实际是加了4字节
    110   ShowMessage(vp01^);
    111   inc(vp01,1);
    112   ShowMessage(vp01^);
    113   inc(vp01,1);
    114   ShowMessage(vp01^);
    115   
    116   FreeMem(vP02);
    117 end;
    118 
    119 procedure TForm1.Button3Click(Sender: TObject);
    120 var
    121   vP01,vP02:PInteger;
    122 begin
    123   GetMem(vP01,4*4);
    124   vP02:=vP01;
    125   vP01^:=1;
    126   ShowMessage(IntToStr(vP01^));
    127   inc(vP01,1);
    128   vP01^:=2;
    129   ShowMessage(IntToStr(vP01^));
    130 
    131   vp01:=vP02;
    132   ShowMessage(IntToStr(vP01^));
    133   inc(vP01,1);
    134   ShowMessage(IntToStr(vP01^));
    135   
    136   FreeMem(vP02);
    137 end;
    138 
    139 procedure TForm1.Button4Click(Sender: TObject);
    140 var
    141   vP01,vP02:PChar;
    142 begin
    143   vp01:=GetMemory(20);
    144   vp02:=vP01;
    145   vP01^:='A';
    146   Inc(vP01,1);
    147   vP01^:='B';
    148   Inc(vP01,1);
    149   vP01^:=#0;//Pchar是以#0结尾的,如果注释掉这句,下面的 ShowMessage(vP01)可能会显示出AB为开头的字符串
    150   vP01:=vp02;
    151   ShowMessage(vP01);
    152 
    153 
    154   FreeMemory(vP02);
    155 end;
    156 
    157 procedure TForm1.Button5Click(Sender: TObject);
    158 var
    159   vP01,vP02:PString;
    160   v:string;
    161 begin
    162   ShowMessage(IntToStr(SizeOf(PString)));
    163   GetMem(vP01,4*4);
    164   FillChar(vP01^,4*4,#0);
    165   vP02:=vP01;
    166   v:='00001';
    167   vp01^:=v;
    168 
    169   inc(vp01,1);
    170   v:='00002';
    171   vp01^:=v;
    172 
    173   inc(vp01,1);
    174   v:='00003';
    175   vp01^:=v;
    176 
    177   inc(vp01,1);
    178   v:='00004';
    179   vp01^:=v;
    180 
    181   vP01:=vP02;
    182   ShowMessage(vp01^);
    183   inc(vp01,1);
    184   ShowMessage(vp01^);
    185   inc(vp01,1);
    186   ShowMessage(vp01^);
    187   inc(vp01,1);
    188   ShowMessage(vp01^);
    189 
    190   FreeMem(vP02);
    191 end;
    192 
    193 
    194 procedure TForm1.Button6Click(Sender: TObject);
    195 var
    196   vP01,vP02:PString;
    197   v:string;
    198 begin
    199   ShowMessage(IntToStr(SizeOf(PString)));
    200   GetMem(vP01,4*4);
    201   FillChar(vP01^,4*4,#0);
    202   vP02:=vP01;
    203   vp01^:='00001';
    204 
    205   inc(vp01,1);
    206   vp01^:='00002';
    207 
    208   inc(vp01,1);
    209   vp01^:='00003';
    210 
    211   inc(vp01,1);
    212   vp01^:='00004';
    213 
    214   vP01:=vP02;
    215   ShowMessage(vp01^);
    216   inc(vp01,1);
    217   ShowMessage(vp01^);
    218   inc(vp01,1);
    219   ShowMessage(vp01^);
    220   inc(vp01,1);
    221   ShowMessage(vp01^);
    222 
    223   FreeMem(vP02);
    224 end;
    225 
    226 
    227 end.
     1 object Form1: TForm1
     2   Left = 451
     3   Top = 186
     4   Width = 670
     5   Height = 675
     6   Caption = 'Form1'
     7   Color = clBtnFace
     8   Font.Charset = DEFAULT_CHARSET
     9   Font.Color = clWindowText
    10   Font.Height = -11
    11   Font.Name = 'MS Sans Serif'
    12   Font.Style = []
    13   OldCreateOrder = False
    14   PixelsPerInch = 96
    15   TextHeight = 13
    16   object Button1: TButton
    17     Left = 56
    18     Top = 32
    19     Width = 75
    20     Height = 25
    21     Caption = 'Button1'
    22     TabOrder = 0
    23     OnClick = Button1Click
    24   end
    25   object Button2: TButton
    26     Left = 56
    27     Top = 88
    28     Width = 75
    29     Height = 25
    30     Caption = 'Button2'
    31     TabOrder = 1
    32     OnClick = Button2Click
    33   end
    34   object Button3: TButton
    35     Left = 56
    36     Top = 144
    37     Width = 75
    38     Height = 25
    39     Caption = 'Button3'
    40     TabOrder = 2
    41     OnClick = Button3Click
    42   end
    43   object Button4: TButton
    44     Left = 56
    45     Top = 200
    46     Width = 75
    47     Height = 25
    48     Caption = 'Button4'
    49     TabOrder = 3
    50     OnClick = Button4Click
    51   end
    52   object Button5: TButton
    53     Left = 152
    54     Top = 88
    55     Width = 75
    56     Height = 25
    57     Caption = 'Button5'
    58     TabOrder = 4
    59     OnClick = Button5Click
    60   end
    61   object Button6: TButton
    62     Left = 248
    63     Top = 88
    64     Width = 75
    65     Height = 25
    66     Caption = 'Button6'
    67     TabOrder = 5
    68     OnClick = Button6Click
    69   end
    70 end
  • 相关阅读:
    BZOJ 1597 [Usaco2008 Mar]土地购买 (斜率优化dp)
    HDU 6602 Longest Subarray (线段树)
    HDU 6521 K-th Closest Distance (主席树+二分)
    2019牛客多校2 H Second Large Rectangle(悬线法)
    The 2019 University of Jordan Collegiate Programming Contest
    CLR via C# 阅读 笔记
    C# 访问https 未能创建 SSL/TLS 安全通道
    转载文章——Datatable删除行的Delete和Remove方法
    ASP.NET Request.UrlReferrer 问题
    ASP.NET WebMethod方法使用 、AngularJS $http请求、 Jquery $.ajax请求
  • 原文地址:https://www.cnblogs.com/dmqhjp/p/15397134.html
Copyright © 2011-2022 走看看