看一个指针用法的例子.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
看一个指针用法的例子

看一个指针用法的例子: ? ? 1 ? ? ? ? var ? ? 2 ? ? ? ? ? ? X, ? Y: ? Integer; ? ? ? // ? X ? and ? Y ? 整数类型 ? ? 3 ? ? ? ? ? ? P: ? ^Integer; ? ? ? ? ? // ? P ? 指向整数类型的指针 ? ? 4 ? ? ? ? begin ? ? 5 ? ? ? ? ? ? X ? :=17; // ? 给 ? X ? 赋值 ? ? 6 ? ? ? ? ? ? P ? := ? @X; ? ? ? ? ? ? ? ? ? // ? 把 ? x的地址赋给p ? ? 7 ? ? ? ? ? ? Y ? := ? P^; ? ? ? ? ? ? ? ? ? // ? 取出p所指向的数值赋给y ? ? 8 ? ? ? ? end; ? ? ? ? 第二行定义了两个变量X,y. ? 第三行声明了p是指向整数类型的指针;意味着p能够指向x或者y的地址.第五行赋给x值,第六行把x的地址赋给p.最 ? ? ? ? 后通过p指向的变量赋值给y.此时,x和y有相同的值. ? ? ? ? 操作符@用来取出变量的地址,也可以取出过程和函数的地址. ? ? ? ? 而符号^有两个目标, ? ? 当它出现在类型定义的前面时如 ^typename 表示指向这种类型的指针; ? ? 当它出现在指针变量后边时 ? 如 point^ 返回指针指向的变量的值; ? ? ? ? 理解指针比较容易理解面向对象的pascal语言,因为指针经常在幕后操作.任何要求动态分配大的内存空间的类型可以用指针类型.例如 ? ? ? ? ,long-string变量,实际在使用指针进行操作.另外一些高级的编程技术需要使用指针类型. ? ? 有时指针是适应object ? pascal严格的类型限制的唯一方法.同过一个通用的指针类型,通过类型转换成不同的指针类型,如下面的例子: ? ? type ? ? ? ? ? ? PInteger ? = ? ^Integer; ? ? var ? ? ? ? R: ? Single; ? ? ? ? I: ? Integer; ? ? ? ? P: ? Pointer; //通用的指针 ? ? ? ? PI: ? PInteger; ? ? begin ? ? ? ? P ? := ? @R; //取出R的内存地址 ? ? ? ? PI ? := ? PInteger(P); //把通用类型转换成指向整数类型的指针 ? ? ? ? I ? := ? PI^; ? ? end; ? ? ? ? 当然了,实数和整数的存储格式不同.这种赋值是把原始的二进制数据从R拷贝到I,而不进行转换. ? ? ? ? 保留字nil是一个特殊的常量可以赋给任何指针类型,当nil赋給一个指针时,指针什么也不指向,是一个空指针. ? ? ? ? @操作符返回变量的内存中的存储地址,或者是过程\函数\方法; ? ? ? ? 1.如果变量,@X返回的是x的地址。如果编译选项{$T-}没有打开,着返回的事一个通用的指针,如果编译选项打开了,着返回的是x的类型对应的指 ? ? ? ? 针. ? ? ? ? 2.如果是例程(过程\函数),@F返回的是F的入口点,@F的类型是一个指针。 ? ? ? ? 3.当@用在类的方法中时,则方法的名称必须有类名,例如@TMyclass.Dosomething ? ? 指针指向TMyclass的dosomething方法。 ? ? ? ? ? ? 当一个过程变量在赋值语句的左边时,编译器期望一个过程值在赋值语句的右边。这种赋值使得左边的变量可以指向右边定义的过程或者函数 ? ? ? ? 入口点。换句话说,可以通过该变量来引用声明的过程或者函数,可以直接使用参数的引用。 ? ? ? ? var ? ? ? ? ? ? F: ? function(X: ? Integer): ? Integer; ? ? ? ? I: ? Integer; ? ? function ? SomeFunction(X: ? Integer): ? Integer; ? ? ? ... ? ? F ? := ? SomeFunction; ? ? // ? 给f赋值 ? ? I ? := ? F(4); ? ? ? ? ? ? ? ? ? ? // ? 调用所指向的函数 ? ? ? ? 在赋值语句中,左边变量的类型决定了右边的过程或者方法指针解释。 ? ? ? ? var ? ? ? ? ? ? F, ? G:

文档评论(0)

kanghao1 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档