unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} { 静态数组, 在声明时就分配好内存了, 譬如: } procedure TForm1.Button1Click(Sender: TObject); var Arr1 : array[0..255] of Char; Arr2 : array[0..255] of Integer; Arr3 : array[0..255] of string; begin ShowMessageFmt('数组大小分别是:%d,%d,%d',[SizeOf(Arr1),SizeOf(Arr2),SizeOf(Arr3)]); end; { 给已知大小的指针分配内存应该用 New, 上面的例子是关于静态数组指针的, 后面要提到的结构体(记录)的指针也是如此. New 的本质也函数调用 GetMem, 但不需要我们指定大小了. 但这对动态数组就不合适了, 不过给动态数组分配内存 SetLength 应该足够了, 譬如: } procedure TForm1.Button2Click(Sender: TObject); var Arr1 : array of Integer; begin SetLength(Arr1, 3); Randomize; Arr1[0] := Random(100); Arr1[1] := Random(100); Arr1[2] := Random(100); ShowMessageFmt('%d%d%d',[Arr1[0],Arr1[1],Arr1[2]]); end; { 这里用到了 GetMem 和 FreeMem, 对分配无类型指针这是比较常用的; 对其他类型的指针它可以, } procedure TForm1.Button3Click(Sender: TObject); var p : Pointer; begin GetMem(p,256); GetWindowText(Handle, p, 256); ShowMessage(PChar(p)); FreeMem(p); end; end.