Basic Pascal Tutorial/Chapter 5/Pointers/zh CN

From Free Pascal wiki
(Redirected from Pointers/zh CN)
Jump to navigationJump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

български (bg) English (en) français (fr) 日本語 (ja) 中文(中国大陆)‎ (zh_CN)

5F -指针类型 (原作者: Tao Yue, 状态: 未更改)

指针是一种数据类型,它拥有一个内存地址。指针可以被看作是内存地址的引用,在存取变量时直接访问内存地址。如果变量是某人的电话号码,那么,指针存储的是,它在电话薄中的准确位置。以操作该内存地址的数据。声明指针类型,必须先确定指向。

指针类型前有个一符号(^),如你要创建一个指向整型的指针,你可以这样做:

type
  PointerType = ^integer;

之后,声明变量类型为PointerType:

 VAR p:PointerType;

在使用前,你需要仅仅说明了p是一个指向整型变量单元的指针变量,但这个整型单元并不存在,在指针变量p中还没有具体的地址值。在程序中必须通过过程调用语句:new(p);才在内存中分配了一个整型变量单元并把这个单元的地址放在变量p中:

 New (p);

一个指针变量只能存放一个地址。在同一时间内一个指针只能指向一个变量单元。当程序再次执行new(p)时,又在内存中新建立了一个整型变量单元,并把新单元的地址存放在p中,从而丢失了旧的变量单元的地址。

若要存取指针数据,在变量名后加^,如,指针类型赋值操作:

p^ := 5;

指针使用完后,要及时释放占用的内存空间。否则程序每次运行时,都将分配内存空间,直到使用完计算机全部空间。释放内存空间,使用:

Dispose(p);

指针可以指向指针,需要注意的是:只是一种指针指向,也就是说是种地址复制,并不是复制。一旦你修改数据,其他指向该地址的指针也将变化。如果你释放了内存地址,其他的指针指向将失效。

指针有什么好处?上面的例子有些牵强,为什么不使用整型而使用指针?指针的强大处在于与记录相结合,它能动态调整数据结构大小。如果你需要按顺序存储很多项数据,你可以使用数组,但是,数组大小固定,如果没有足够大的地方,你可能无法存下所有数据。

动态数据结构,你只需要创建一个指向记录的数据类型,像,栈和队列都通过这种结构实现:

type
  PointerType = ^RecordType;
  RecordType = record
    data : integer;
  next : PointerType;
end;


next指向每个元素。 链中记录为nil时,将表示没有记录。

上一页 目录 下一页