下载此文档

第九章指针类型.doc


文档分类:IT计算机 | 页数:约21页 举报非法文档有奖
1/21
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/21 下载此文档
文档列表 文档介绍
指针类型在任何语言中都是比较难以理解也是比较灵活的一种数据类型    指针常是它所指的变量的内存地址。声明指针类型的语法如下:  Type   〈指针类型标志符〉=^〈基类型〉;  其中,指针类型标志符即是指针类型名,基类型可以是简单类型,如整型,实型,字符型等,也可以是结构类型,如数组,记录,集合等。 指针类型声明示例:Type  Tr=^Integer; PI=^real;  Word=Record    Name:String[10];    Age:Integer;    Scores:Real;  End;BytePtr=^Byte;WordPtr=^Word;   上例中,声明了4个指针类型。其中,BytePtr是一个指向字节类型的数据;而WordPtr是一个指向记录类型Word的数据   ObjectPascal不要求基类型一定是要在前面已声明的,也可以是一个标志符,然后在同一个模块内声明基类型。声明了指针类型后,就可以声明指针类型的变量,如: Var    BP:BytePtr;   WP:WordPtr;或:  Var      BP:^Bytel; 指针所指的基类型可以是简单类型,也可以是构造类型,如:  Type     Student=Record        Name:String;        Age:Integer;        Sex:(Man,Woman);     End;  Var      StuPtr:^Student;   上例中,声明了一个指向记录类型的Student指针变量StuPtr,以后程序中就可以使用StuPtr^来表示记录类型Student的动态变量。要访问其中的Name字段,可以写成StuPtr^.Name。这里介绍动态变量的概念,动态变量的构成是用指针类型的变量标志符后加一个“^”符号,就构成指针所指向的基类型的动态变量,如上例中的StuPtr^就是Student的动态变量。  与通常的变量一样,一旦声明了指针变量,编译器将给指针分配存储单元,但存储单元中的值尚未确定。要想让指针指向确定的地址,必须通过赋值语句或New标准过程来实现。如:Label1,2,3,4,5;Var  M:Integer; X1,X2:^Integer;Begin  1:M:=20; 2:X1:=***@M; 3:New(X2); 4:X2^:=150; 5:Dispose(X2);End;执行上述语句段时,若编译器给变量M分配的内存地址为$011001,那么,执行标号为3的语句后,指针变量X1和变量M的关系如下: X1 $011001 $01100120    即指针变量X1的值为变量M的内存地址。  执行语句3时,编译器首先在内存中分配适宜存放指针X2所指向的数据(这里为正数)的一组存储单元(假设为$01100A),然后将这组单元的首地址写入指针X2。这里X2^称为动态存储变量。使用New建立了动态存储变量后,它的值是不确定的,以后可以将某个整数值存储在该单元中。X2 $01100A $01100A? X2 $01100A $01100A150  执行语句5后,标准过程Dispose将释放由New分配的内存单元。在程序段中,标号过程New和Dispose应配对使用。当用New分配的动态存储空间不再使用时,应及时地释放所分配的存储空间,避免发生错误。如果分配存储空间时内存不够,将触发一个异常错误(EoutOfMemory),程序随即终止。上例中的运算符“@”和“^”专用于指针类型,分别称为取址和应用运算符。  指针的运算Delphi提供了专门的过程和函数来操作指针,这些过程和函数是:New过程,@操作符,PTR函数,GetMem过程1)New过程   New是ObjectPascal中的标准例程(在System单元中声明),用于在应用程序中为动态变量分配一块区域,并把该区域的地址赋给指针变量。所分配区域的大小由指针所指的类型决定。如果分配存储空间时内存不够,将触发一个异常错误(EoutOfMemory)New过程的声明如下:    ProcedureNew(VarP:Pointer);    其中P是一个指针变量,调用了New过程后,程序就可以用P^作为指针所指类型的动态变量。相应地,当程序不再需要使用动态变量时,就应当调用标准例程Dispose删除New创建的动态变量,并释放所分配的空间。程序示例如下:Type  PlisEntry=^TlistEntry;  TlistEntry=Record     Next:PlistEntry;     Text:String;     Count:Integer;  End;Var  List,P:PlistEntry;Begin   ……

第九章指针类型 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数21
  • 收藏数0 收藏
  • 顶次数0
  • 上传人zbfc1172
  • 文件大小56 KB
  • 时间2019-06-27