delphi 指针使用

原文地址:http://zhidao.baidu.com/question/2351810.html

 

指  针 
指针的动态变量 
      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之间有如下关系: 
      P->P' 
     以下语句把整数5存放到p所指向的动态变量p^ 中去: 
      p^:=5; 
      以下语句把p所指向的p^中的值赋给整型变量i: 
      i:=p^; 
      如果指针变量p并未指向任何存储单元,则可用下列赋值语句: 
      p:=nil; 
     其中nil是Turbo Pascal保留字,表示“空”,相当于C里面的null 

对动态变量的操作 
   在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^  writeln('output 2 data: ',p1^:4,p2^:$); 
       end. 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值