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一样,为获取变 ...
随机推荐
- Effective C++ 条款23
宁non-member.non-friend顶替member性能 本节介绍笔者为什么时间来实现某些功能.择非成员函数而且是非友元函数.这样做总结一句话,就是最大限度的实现类的封装性. 封装意味着不可见 ...
- XCode5.1.1怎样实现代码块自己主动排版
1.问题描写叙述 在开发中常常遇到代码块须要排版的情况,假设一行一行缩进就太out了,但在xcode中怎样实现还真不知道 2.解决方法 2.1选中须要排版的代码块 2.2单击"Editor ...
- Ubuntu 16.04安装MinGW32(在/etc/apt/sources.list里添加源)
Ubuntu 16.04下直接使用命令安装MinGW32: sudo apt-get install mingw32 但是,会报错: Unable to locate package mingw3 ...
- sql 连接查询
什么是连接查询呢 概念:根据两个表或多个表的列之间的关系,从这些表中查询数据. 目的:实现多个表查询操作. 分类 首先划分一下,连接分为三种:内连接.外连接.交叉连接 内连接(INNER JOIN): ...
- 将字符串转换成xml并取得对应的值
如数据库中有一个字段保存了xml格式的一串字符串: <?xml version="1.0" encoding="utf-16"?><Array ...
- C# 获取Windows系统:Cpu使用率,内存使用率,Mac地址,磁盘使用率
一.获取CPU使用率: #region 获取CPU使用率 #region AIP声明 [DllImport("IpHlpApi.dll")] ...
- Python 动图、动画制作 —— moviepy、matplotlib.animation
进入命令行界面(windows ⇒ cmd),下载安装,pip install moviepy 0. figure 的成员函数 # 创建 figure fig, ax = plt.subplots() ...
- day68_淘淘商城项目_01
原文:day68_淘淘商城项目_01 课程计划 第一天: 1.电商行业的背景介绍--电子商务 2.淘淘商城的系统架构 a) 功能介绍 b) 架构讲解 3.工程搭建--后台工程 a) 使用maven搭建 ...
- Codeforces 15C Industrial Nim 简单的游戏
主题链接:点击打开链接 意甲冠军: 特定n 下列n行,每一行2的数量u v 表达v礧:u,u+1,u+2···u+v-1 问先手必胜还是后手必胜 思路: 首先依据Nim的博弈结论 把全部数都异或一下, ...
- Android 调用系统分享文字、图片、文件,可直达微信、朋友圈、QQ、QQ空间、微博
原文:Android 调用系统分享文字.图片.文件,可直达微信.朋友圈.QQ.QQ空间.微博 兼容SDK 18以上的系统,直接调用系统分享功能,分享文本.图片.文件到第三方APP,如:微信.QQ.微博 ...