现在是面向对象漫天飞的年代了,大家都在在谈面向对象编程。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指针运用理解的更多相关文章

  1. Delphi指针的用法

    DELPHI指针的使用 大家都认为,C语言之所以强大,以及其自由性,很大部分体现在其灵活的指针运用上.因此,说指针是C语言的灵魂,一点都不为过.同时,这种说法也让很多人产生误解,似乎只有C语言的指针才 ...

  2. Delphi 指针大全(光看不练是学不会的)

    大家都认为,C语言之所以强大,以及其自由性,很大部分体现在其灵活的指针运用上.因此,说指针是C语言的灵魂,一点都不为过.同时,这种说法也让很多人产生误解,似乎只有C语言的指针才能算指针.Basic不支 ...

  3. delphi指针简单入门

    delphi指针简单入门:         看一个指针用法的例子:     1         var     2             X,   Y:   Integer;       //   ...

  4. DELPHI指针的使用

    DELPHI指针的使用 大家都认为,C语言之所以强大,以及其自由性,很大部分体现在其灵活的指针运用上.因此,说指针是C语言的灵魂,一点都不为过.同时,这种说法也让很多人产生误解,似乎只有C语言的指针才 ...

  5. delphi.指针.PChar

    此文是delphi.指针.应用姊妹篇,想细化一下PChar应用,所以有了此文. 注意: 1:此文讲的是PChar与字符串相关操作,其它方法暂不多讲. 2:由于D分开Ansi/Unicode的两种完全不 ...

  6. C语言教学--二维数组和指针的理解

    对于初学者对二维数组和指针的理解很模糊, 或者感觉很难理解, 其实我们和生活联系起来, 这一切都会变得清晰透彻. 我们用理解一维数组的思想来理解二维数组, 对于一维数组,每个箱子里存放的是具体的苹果, ...

  7. 【C++】类中this指针的理解

    转自 苦涩的茶https://www.cnblogs.com/liushui-sky/p/5802981.html C++类中this指针的理解 先要理解class的意思.class应该理解为一种类型 ...

  8. 函数指针的理解 from 数据结构

    今天在学习数据结构中遇到一些问题,函数的指针不知道怎么用,给自己科普一哈 1 int LocateElem_Sq(SqList L, LElemType_Sq e, Status(*Compare)( ...

  9. delphi 指针 认识

    delphi 指针分为类型指针和无类型指针: 类型指针分为PChar.PInteger.PString等. 无类型指针Pointer. PPChar/PP...为指针的指针 @和Addr一样,为获取变 ...

随机推荐

  1. Android Studio教程-创建第一个项目Hello World

    前段时间打开Android studio 在build过程中总会出现以下错误 Error:Execution failed for task ':app:preDebugAndroidTestBuil ...

  2. Eclipse 学习总结

    一. Eclipse 中一个普通 JavaWeb 项目的目录结构 如果项目工程中没有web.xml文件,可以手动动态添加.        右击项目 ->  java EE Tools  -> ...

  3. 自己动手编写一个VS插件(五)

    作者:朱金灿 来源:http://blog.csdn.net/clever101 继续编写VisualStudio插件.这次我编写的插件叫DevAssist(意思是开发助手).在看了前面的文章之后你知 ...

  4. CUDA—使用GPU暴力破解密码

    GPU支持大规模的并行加速运算,胜在量上,CPU处理大量的并行运算显得力不从心,它是胜在逻辑上.利用显卡加速的应用越来越多,但如果说GPU即将或最终将替代CPU还有点言过其实,二者最终将优势互补,各尽 ...

  5. 嵌入式OS入门注意事项-同RTX案件:九.关于优先-翻转,继承和天花板

    嵌入式OS入门注意事项-同RTX案件:九.关于优先-翻转,继承和天花板 涉及当调度优先级,会有很多问题,本文中,优先调度和一些战略的主要问题,以应付. 有几个概念如下:(priority invers ...

  6. WPF 呼吸灯特效

    原文:WPF 呼吸灯特效 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u014117094/article/details/46738621 pa ...

  7. Android开源项目SlidingMenu本学习笔记(两)

    我们已经出台SlidingMenu使用:Android开源项目SlidingMenu本学习笔记(一个),接下来再深入学习下.依据滑出项的Menu切换到相应的页面 文件夹结构: watermark/2/ ...

  8. WPF 四种尺寸单位

    原文:WPF 四种尺寸单位 像素 px 默认单位可以省略 厘米cm 英寸 in 点 pt 1in = 96px 1cm=96/2.42px 1pt=96/72px

  9. linux_无秘登录问题(不生效)

    1 . 登录1,执行命令 ssh-keygen -t rsa 之后一路回 车,查看刚生成的无密码钥对: cd .ssh 后 执行 ll 2 .把 id_rsa.pub 追加到授权的 key 里面去. ...

  10. ORACLE 时间加减操作

    DATE和timestamp类型都可以进行加减操作.可以对当前日期加年.月.日.时.分.秒,操作不同的时间类型,有三种方法: 1 使用内置函数numtodsinterval增加小时,分钟和秒2 加一个 ...