-----------开发环境 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