Delphi指针运用理解
现在是面向对象漫天飞的年代了,大家都在在谈面向对象编程。Java对指针“避而不谈”,C#虽然支持指针运用,但是也淡化处理。
然而,指针还是好完全掌握为妙,省得在开发过程碰钉子,至于对指针的运用在于开发人员的存乎于心,运用得当。指针运用的不好,不要怪开发语言及其机制。下面谈到的是在Delphi中指针的运用,至于其他语言,指针的思想是相通的。
指针是一种数据类型,和编程语言中其它的类型一样,是一种类型的区分,比如 Integer 是带符号的整型,在32位X86机中,是用4个字节表示,而指针也是用4个字节表示,是无符号的整型,这样一来,就清楚了,指针里面存储的值永远大于0。我们声明一个变量,如变量I为Integer型,其实对于编译器来说,I是一个地址的标识,是告诉编译器的一个标示。它本身在计算机中是一个地址。I:=1, 是说明I这个变量对应的内存空间中存储了 1 这个数值。当然,对于这些基本数据类型,编译器是自动分配内存空间,它的空间大小是4个字节,用来存储整型类型的数值。当然这些基本类型变量,是不用手工进行释放,编译器会释放这些声明的内存空间。还有一个问题,既然变量时一个地址标识,就应该知道它的内容地址?没错,我们要想知道它的地址并不难,在Delphi中,你是使用@运算符或Addr 就能取出其内容地址。当然取出来的是16进制表示的,可以通过 showmessage( IntToStr(Integer(@I))) 打印出来。显示的值就是其计算机对变量I的标示,计算机是不认得变量 I的,只认识其地址。好了,再进一步思考。如果我要存储这个地址,要对这个地址进行操作,该怎么办呢? 指针,当然是指针,我们计算机界的先辈当然很聪明,发明了指针。指针是一个好东西,大到宇宙万物,小的电子原子,它都能表达。正如中国古老的周易常讲的 无能生有,有能化无。这个指针本身是一种数据类型,前面我们已经说了,它是专门用来存储地址值的。声明 Pint:PInteger; 或 Pint:^Integer; Pint是专门用来存储整型变量的地址值的。如果想对变量I地址值进行存储,Pint:=@I; 即可。指针有很多好处,是好处多多啊!下面先对Delphi中的指针的概念讲讲,好戏还在后面呢?
Delphi中指针分两大类:类型指针和无类型指针;类型指针,指的是,指针是存储的地址值是有“身份”的,这个“身份”就是数据的类型,能确切的其大小的。比如 PInteger,是整数Integer类型的指针,PByte是Byte字节类型的指针。声明这种类型的指针,就明确告诉编译器,它只能存储这种类型的变量的地址,在Delphi中是强数据类型,每个数据类型要兼容,必须显式的转换。有了类型指针,就必然有无类型指针,不然世界就不精彩了,因为无类型指针的好处多多啊!有些场合是必须要使用无类型指针,语言大师们要这个无类型指针粉墨登场,是事出有因的。比如在申明个内存块,在运行时才知道其内存确切大小,是使用无类型的就很方面了,当然这个要注意这个Pchar,在Delphi2009版本以前PChar等同于PAnsiChar,在Delphi2009的以后的版本(含Delphi2009)支持Unicode,PChar等同于PWideChar,而PAnsichar,则仍旧表示以前的含义,这个要注意,在Delphi2009的开发环境中编程要注意这点。这个先顺便提一下,我们在后面还要和它见面的。无类型指针Pointer表示。声明一个无类型指针,P:Pointer,它不需要指定基类型; 无类型指针任何指针类型是赋值兼容的,因为它们存储的都是地址值。
知识光认知还不行,还得去运用,只有运用了,才能加深理解,而运用的越熟练,越能加深理解。上面我们知道了变量本事无非是一个地址值,又知道了Delphi中的两种支持类型-类型指针和无类型指针。下面让我们继续熟悉跟指针相关了的运输符号。我们常见到的运用符号有大名鼎鼎的@和^这两个,当然Addr等同于@,一般人比较懒,Addr用的比较少,要敲几下键盘,用@的居多,当然这跟个人习好有关,用哪个都无可后非。关键是要用的正确!还有就是 Inc 和 Dec,哦,还有这个两个,其实这两个在指针中的运用也是大的很。@是取变量的地址值。其实在计算机内表示的任何事物都有确切的地址,不然“天下大乱了”,一旦内存地址错误,程序就是死翘翘,更有甚者,操作系统崩溃,不然在Win98的后续版本,对内存违规操作做了很好的控制。@获取操作数的地址,这个操作数可以是变量,过程,函数或类的方法。呵呵,够厉害吧。^,这个符号,是构成指针所指类型的动态变量。要访问一个指针所指的数据,通过在指针变量名后跟^运算符即可。(未完)
http://blog.csdn.net/tjb_1216/article/details/4649073
Delphi指针运用理解的更多相关文章
- Delphi指针的用法
DELPHI指针的使用 大家都认为,C语言之所以强大,以及其自由性,很大部分体现在其灵活的指针运用上.因此,说指针是C语言的灵魂,一点都不为过.同时,这种说法也让很多人产生误解,似乎只有C语言的指针才 ...
- Delphi 指针大全(光看不练是学不会的)
大家都认为,C语言之所以强大,以及其自由性,很大部分体现在其灵活的指针运用上.因此,说指针是C语言的灵魂,一点都不为过.同时,这种说法也让很多人产生误解,似乎只有C语言的指针才能算指针.Basic不支 ...
- delphi指针简单入门
delphi指针简单入门: 看一个指针用法的例子: 1 var 2 X, Y: Integer; // ...
- DELPHI指针的使用
DELPHI指针的使用 大家都认为,C语言之所以强大,以及其自由性,很大部分体现在其灵活的指针运用上.因此,说指针是C语言的灵魂,一点都不为过.同时,这种说法也让很多人产生误解,似乎只有C语言的指针才 ...
- delphi.指针.PChar
此文是delphi.指针.应用姊妹篇,想细化一下PChar应用,所以有了此文. 注意: 1:此文讲的是PChar与字符串相关操作,其它方法暂不多讲. 2:由于D分开Ansi/Unicode的两种完全不 ...
- C语言教学--二维数组和指针的理解
对于初学者对二维数组和指针的理解很模糊, 或者感觉很难理解, 其实我们和生活联系起来, 这一切都会变得清晰透彻. 我们用理解一维数组的思想来理解二维数组, 对于一维数组,每个箱子里存放的是具体的苹果, ...
- 【C++】类中this指针的理解
转自 苦涩的茶https://www.cnblogs.com/liushui-sky/p/5802981.html C++类中this指针的理解 先要理解class的意思.class应该理解为一种类型 ...
- 函数指针的理解 from 数据结构
今天在学习数据结构中遇到一些问题,函数的指针不知道怎么用,给自己科普一哈 1 int LocateElem_Sq(SqList L, LElemType_Sq e, Status(*Compare)( ...
- delphi 指针 认识
delphi 指针分为类型指针和无类型指针: 类型指针分为PChar.PInteger.PString等. 无类型指针Pointer. PPChar/PP...为指针的指针 @和Addr一样,为获取变 ...
随机推荐
- 一起学Python:协程
一:协程-yield 协程,又称微线程,纤程.英文名Coroutine. 协程是啥 协程是python个中另外一种实现多任务的方式,只不过比线程更小占用更小执行单元(理解为需要的资源). 为啥说它是一 ...
- 【非常高%】【codeforces 733B】Parade
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- .NET 即时通信,WebSocket
.NET 即时通信,WebSocket 即时通信常用手段 1.第三方平台 谷歌.腾讯 环信等多如牛毛,其中谷歌即时通信是免费的,但免费就是免费的并不好用.其他的一些第三方一般收费的,使用要则限流(1s ...
- 左右RAC CRS 自己主动启动
左右CRS自己主动重新启动实验 一.检验ASM [root@rac1 ~]# /etc/init.d/oracleasm status Checking if ASM is loaded: yes C ...
- matplotlib tricks(关闭坐标刻度、坐标轴不可见)
plt.gray():只有黑白两色,没有中间的渐进色 1. 关闭坐标刻度(plt 与 AxesSubplot) plt plt.xticks([]) plt.yticks([]) 关闭坐标轴: plt ...
- 【转】mysql的SQL_NO_CACHE(在查询时不使用缓存)和sql_cache用法
转自:http://www.169it.com/article/5994930453423417575.html 为了测试sql语句的效率,有时候要不用缓存来查询. 使用 SELECT SQL_NO_ ...
- win10下Linux子系统开启ssh服务
原文:win10下Linux子系统开启ssh服务 为了便于交流共同学习,博主QQ群242629020(stm32-MCU认认真真交流群) 欢迎批评指导!!!电梯:https://jq.qq.com/? ...
- poj 3390 Print Words in Lines 动态规划
意甲冠军: 给n每行长度和字符可放置最大数量字m,每一行产生值至(m-x)^2,x是一个字符上线人数(包含空话之间格).为了让所有的完成,产生的话值最小和. 分析: 动态规划非常重要的就是状态的定义, ...
- 【甘道夫】基于Mahout0.9+CDH5.2执行分布式ItemCF推荐算法
环境: hadoop-2.5.0-cdh5.2.0 mahout-0.9-cdh5.2.0 引言 尽管Mahout已经宣布不再继续基于Mapreduce开发,迁移到Spark.可是实际面临的情况是公司 ...
- 面向对象举例(一) —— 顶点(vertex)、边(edge)与图(graph)
Graph: class Graph(dict): def __init__(self, vs=[], es=[]): for v in vs: self.add_vertex(v) for e in ...