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
原文地址:https://www.cnblogs.com/dmqhjp/p/15397134.html