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一样,为获取变 ...
随机推荐
- oracle 全部查询和表空间,以及其关系
select * from dba_users; 查看数据库里面全部用户,前提是你是有dba权限的帐号.如sys,system select * from all_users; 查看你能管 ...
- 一起学Python:协程
一:协程-yield 协程,又称微线程,纤程.英文名Coroutine. 协程是啥 协程是python个中另外一种实现多任务的方式,只不过比线程更小占用更小执行单元(理解为需要的资源). 为啥说它是一 ...
- 【18.40%】【codeforces 631D】Messenger
time limit per test 2 seconds memory limit per test 512 megabytes input standard input output standa ...
- C# WPF 多个window 相互覆盖的次序控制 不用topmost
原文:C# WPF 多个window 相互覆盖的次序控制 不用topmost WindowInteropHelper mianHanel = new WindowInteropHelper(Mai ...
- Android音频输入通道的底层硬件和软件开发分析
Android潜在的发展音频输入通道的软硬件分析 我们都知道耳机Mic集成在一直的那种四段耳机Mic插头是Android设备上比較经常使用.可是也会有分开的情况,比較假设在普通的PC机中装Androi ...
- WPF 好看的矢量图标
原文:WPF 好看的矢量图标 本文告诉大家一个好用的网站,里面提供很多好看的图标. 本文介绍的网站是 Xamalot 里面有很多好看的图标. 例如我找到了一个好看的图标 我只需要点击下面的下载就可以了 ...
- WPF 中那些可跨线程访问的 DispatcherObject(WPF Free Threaded Dispatcher Object)
原文 WPF 中那些可跨线程访问的 DispatcherObject(WPF Free Threaded Dispatcher Object) 众所周知的,WPF 中多数对象都继承自 Dispatch ...
- 树莓派的rc.local档(设置开机)
为了树莓派执行命令或程序时启动.需要被添加到顺序rc.local档.这是为那些谁执行后,直接要权力树莓派没有配置.或者不希望每次都手动启动该程序很实用. 的方法是使用cron和crontab. EDI ...
- 将您的Cordova应用程序打包
参考 https://github.com/MicrosoftDocs/cordova-docs/blob/master/articles/tutorial-package-publish/tutor ...
- 使用Toast进行用户提醒(转)
Toast是Android提供的一个轻量级的用户提醒控件,使用也很简单,就相当一个极简的dialog!!!下面将向您介绍一些Toast的详细用法: 1.普遍使用的方法: Context context ...