现在是面向对象漫天飞的年代了,大家都在在谈面向对象编程。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. SpringBoot项目优化和Jvm调优(楼主亲测,真实有效)

    项目调优 作为一名工程师,项目调优这事,是必须得熟练掌握的事情. 在SpringBoot项目中,调优主要通过配置文件和配置JVM的参数的方式进行. 在这边有一篇比较好的文章,推荐给大家! Spring ...

  2. 利用WPF建立自己的3d gis软件(非axhost方式)(五)在鼠标点击的位置增加UI

    原文:利用WPF建立自己的3d gis软件(非axhost方式)(五)在鼠标点击的位置增加UI 先下载SDK:https://pan.baidu.com/s/1M9kBS6ouUwLfrt0zV0bP ...

  3. CSS拾遗(一)

    重新看<精通CSS(第二版)>做一些记录,方便今后巩固. 1.外边距叠加 只有普通文档流中块框的垂直外边距才会发生外边距叠加.行内框.浮动框.或绝对定位框之间的外边距不会叠加. 2.相对定 ...

  4. URAL 1577. E-mail(简单二维dp)

    给你两个子串,让你找出来一个最短的字符串包括这两个子串,输出最多的子串有多少种. 类似于最长公共子序列,相等的话长度+1,不想等的话比較长度,使用长度小的. 1577. E-mail Time lim ...

  5. vue项目 下载表格 java后台返回的是信息流表格如何下载解决乱码

    主要是在请求参数后面加上{responseType: 'blob'}或者arrayBuffer this.$http.get(this.api.export, { params: this.info, ...

  6. hdu1845 Jimmy’s Assignment --- 完整匹配

    意甲冠军: 它需要一个特殊的图,以找到最大匹配.该图的特征是:无向图,度的每个节点3.这是一个双边连接组件(the graph is 2-edge-connected (that is, at lea ...

  7. 机器学习: t-Stochastic Neighbor Embedding 降维算法 (一)

    Introduction 在计算机视觉及机器学习领域,数据的可视化是非常重要的一个应用,一般我们处理的数据都是成百上千维的,但是我们知道,目前我们可以感知的数据维度最多只有三维,超出三维的数据是没有办 ...

  8. Codeforces 15C Industrial Nim 简单的游戏

    主题链接:点击打开链接 意甲冠军: 特定n 下列n行,每一行2的数量u v 表达v礧:u,u+1,u+2···u+v-1 问先手必胜还是后手必胜 思路: 首先依据Nim的博弈结论 把全部数都异或一下, ...

  9. iOS 5.1.1 设备不能安装AdHoc问题版本号

    之前苹果更新了审计规范,要求必须支持64通过苹果的审核权限位架构的应用.     但运营商表示反馈.使用iOS5.1.1该系统无法安装我们的包Adhoc版本号.     认为非常莫名.由于我们在Dep ...

  10. Delphi内存管理(Integer、Boolean、Record、枚举等都是在作用域内编译器自动申请内存,出了作用域自动释放;另外,字符串、Variant、动态数组、接口也是由Delphi自动管理)

    一.什么是堆.栈? 程序需要的内存空间分为 heap(堆) 和 stack(栈),heap 是自由存储区, stack 是自动存储区,使用 heap 需要手动申请.手动释放, stack 是自动申请. ...