最近两周一直在学习DELPHI,由于之前对VB研究了一段时间,基本上DELPHI的东西都可以搞清楚,不过当遇到指针类型的时候却困惑了,特别是指针和记录一起使用的时候,更是云里雾里,虽然我经常提醒自己“指针不过是一串地址而已”!经过两天的苦苦思索,终于搞清楚了,所以写出来纪念一下子。
         PASCAL语言中提到了几个高级数据类型:数组、枚举、集合、记录、指针。指针恐怕是在做数据时用的最频繁的一种类型了,所以掌握指针类型是必须的。指针类型在使用时须要先定义,然后再声明变量,最后再使用,如下为一简单的指针类型的使用:
 type              //1定义
   take=^takeinfo;
   takeinfo=record
   age:integer;
   end;
var             //2声明
   t1,t2:take;
begin           //3使用
   new(t1);
   t1.age:=10;
   t2:=t1;
   application.MessageBox(pchar(inttostr(t2.age)),'test',mb_ok);
   DISPOSE(T1);
end.     
从上面可以看到这是一个和记录混用的(动态)指针,由于是高级数据类型所以比PASCAL内置的类型多了一个步骤:定义,只有在定义之后PASCAL才会知道是什么类型的数据。其它的就一样了,声明后使用。动态指针的调用是通过DELPHI内置的NEW过程来完成的,这个相当于是告诉PASCAL“我要开始工作了,给我分配一点空间”,至于这个空间有多大则是由该指针指向的变量所赋值的大小决定的,指针在这个过程中仅仅执行了记录变量地址的工作,分配空间的事不规它管。按照程序工作的逻辑,在申请内存空间后必须要释放,否则在程序运行的过程中内存空间会一直被占用,为了减少内存的负担,就必须使用DISPOSE过程来释放空间。
这里也是让我混淆的地方:因为和记录类型混用,记录是用来管理不同类型的数据,它和集合很相似,区别仅仅是一个是同类型,一个是不同类型;动态指针在这里的作用还是一样,只记录地址,如果给记录中的某个变量赋值,那么这个值是归域中的变量所有,和指针是没有关系的。至于上面的为何T2:=T1后T2的AGE域为何和T1相同,是因为T1和T2指向了同一个地方而已
b.gif