您的位置:首页 > 编程语言 > Delphi

终于把DELPHI的指针搞清楚了

2010-01-02 13:19 351 查看
最近两周一直在学习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指向了同一个地方而已


本文出自 “中国CHS实验室” 博客,谢绝转载!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: