一个指针变量指示了内存的位置,PASCAL通用指针类型的名称是Pointer。Pointer。有时又被称为无类型指针,因为它只指向内存地址,但编译器并不管指针所指向的数据,这一点与PASCAL严谨的风格似乎不相称,所以建议你在大部分情况下用有类型的指针。 有类型指针在你的应用程序的Type部分用^ (或Pointer)运算符声明。对于有类型指针来说,编译器能准确地跟踪指针所指内容的数据类型,这样用指针变量,编译器就能跟踪正在进行的工作。以下是声明指针的例子。 要记住一个指针变量仅仅是存储一个内存的地址,为指针所指向的内容分配空间是程序员要干的工作,用在前面介绍过的并列在表2 - 6中的内存分配例程来分配内存。 注意如果一个指针没有指向任何数据,它的值是n i l,它就被称为是零( n i l )指针或空(null) 指针。 要访问一个指针所指向的内容,在指针变量名字的后面跟上^运算符。这种方法称为对指针取内容。下面的代码演示怎样用指针:
用New()函数能为一个指针分配指定长度的内存空间。在为某结构分配内存时,因为编译器知道要分配的内存的大小,所以调用New()就能分配到所需的字节,而且它比GetMem或Allocmem()更安全,更易于使用。但不能用New()为Pointer 或Pchar变量分配内存,因为编译器不知道需要分配多大的内存。另外要记住用Dispose()函数来释放用New()分配的内存。当编译器不知道要分配多少内存时,就要用到GetMem和Allocmem(),在对PChar和Pointer类型分配内存时,编译器不可能提前告诉你要分配多少,因为它们有长度可变特性。要注意,不要试图操作分配空间以外的数据,因为这是导致“Access Violation”错误最常见的原因。用FreeMem()来释放由GetMem( )和Allocmem( )分配的内存。顺便说一下,Allocmem要比GetMem()安全,因为AllocMem()总是把分配给它的内存初始化为零。 C程序员在学习Object Pascal时感到头痛的是, Object Pascal对指针类型的检查非常严格,例如, 下面的代码中变量a和变量b并不兼容: var a :^integer; b :^integer; 相反,在C语言中它们是兼容的: Object Pascal认为每一个指针类型是相异的,为了把a的值赋给b,你必须建立一个新的类型,示例如下: type Pin = ^integer; var a,b :pin; 也可以直接写 var a,b : ^integer;