Pascal学习


——基本Pascal学习

 

返回

 

第1章 第2章 第3章 第4章 第5章
Pascal语言概述 基础知识 顺序结构 选择结构 循环结构
第6章 第7章 第8章 第9章 第10章 第11章
枚举型和子界型 数组 函数与过程 集合与记录 指针 文件

 

第十章 指针

10.1 指针的动态变量

10.2 对动态变量的操作

10.1 指针的动态变量


1.定义指针类型
  在Turbo Pascal中,指针变量中存放的某个存储单元的地址,即指针变量指向某个存储单元。一个指针变量仅能指向某一种类型的存储单元,这种数据类型是在指针类型的定义中确定的,称为指针类型的基类型。指针类型定义如下:
   类型名=^基类型名;
例如:type q=^integer;
   var a,b,c:q;
  说明q是一指向整型存储单元的指针类型,其中"^"为指针符。a,b,c均定义为指针变量,分别可以指向一个整型存储单元。
  上例也可定义为:
    var a,b,c:^integer;
  指针也可以指向有结构的存储单元。
例如:type person=record
        name:string[10];
        sex:(male,female);
        age:20..70
      end;
   var pt:^person;
  pt为指向记录类型person的指针变量。
2.动态变量
  应用一个指针指向的动态存储单元即动态变量的形式如下:
    指针变量名^
例如:p^、q^、r^
  指针变量p和它所指向的动态变量^p之间有如下关系:
zhizhen.jpg (1880 字节)
以下语句把整数5存放到p所指向的动态变量p^ 中去:
p^:=5;
以下语句把p所指向的p^中的值赋给整型变量i:
i:=p^;
如果指针变量p并未指向任何存储单元,则可用下列赋值语句:
p:=nil;
其中nil是Turbo Pascal保留字,表示“空”,相当于C里面的null

10.2 对动态变量的操作


  在Turob Pascal程序中,动态变量不能由var直接定义而是通过调用标准过程new建立的。过程形式为:
    new(指针变量名);
  如果有下列变量定义语句:
   var p:^integer;
  仅仅说明了p是一个指向整型变量单元的指针变量,但这个整型单元并不存在,在指针变量p中还没有具体的地址值。在程序中必须通过过程调用语句:new(p);才在内存中分配了一个整型变量单元,并把这个单元的地址放在变量p中,一个指针变量只能存放一个地址。在同一时间内一个指针只能指向一个变量单元。当程序再次执行new(p)时,又在内存中新建立了一个整型变量单元,并把新单元的地址存放在p中,从而丢失了旧的变量单元的地址。
  为了节省内存空间,对于一些已经不使用的现有动态变量,应该使用标准过程dispose予以释放。过程形式为:dispose(指针变量名);为new(指针变量名)的逆过程,其作用是释放由指针变量所指向的动态变量的存储单元。例如在用了new(p)后在调用dispose(p),则指针p所指向的动态变量被撤销,内存空间还给系统,这时 p的值为 nil。

例:输入两个数,要求先打印大数后打印小数的方式输出,用动态变量做。
 program dongtai;
  type intepter=^integer;
  var p1,p2:intepter;
  procedure swap(var,q1,q2:intepter);
   var p:integer;
  begin
   p:=q1;q1:=q2;q2:=p;
  end;
 begin
  new(p1);new(p2);
  writeln('input 2 data: ');readln(p1^,p2^);
  if p1^<p2^ then swap(p1,p2);
  writeln('output 2 data: ',p1^:4,p2^:$);
 

返回>>TOP