您现在的位置:首页 >> 基础算法 >> window基础 >> 内容

对Object Pascal的指针的一些总结(3)

时间:2011/9/3 15:34:29 点击:

Delphi中指针功能非常强大,所有c中能实现的指针Delphi中都能实现. 上面认为Delphi指针不是强项的只是一种误解(或者对指针的机制一知半解).
由于Pascal语言的限制, 用Delphi的指针时很多情况下需要强制类型转换. Delphi中提供了很多指针类型, 而且非常方便的是你可以自定义自己的指针类型.
一个经验: 要掌握一种数据类型并且能够灵活应用,一个比较好的办法是别考虑什么类型是什么名字, 而只需要考虑这种类型的变量将占用多少字节. 凡是字节数相同的类型都可以认为是同一类型 :-), 提供不同类型只是为了编译器能够更方便的查找错误而已. 比如: Integer, Pointer, PChar, TSmallPoint甚至 array [0..4] of Char
你都可以把他们当成是同一类型加以使用(有了这种思路, 可以实现很大的程序灵活性和代码高效性). 所以我很不理解的是JAVA中不支持指针(因此我也认为用JAVA绝对不可能写出很高效的程序, 而且会有很多C/C++/DELPHI中用一句话可以完成的工作在JAVA中需要用一个复杂过程, 消耗很多额外内存才能达到相同目的). 就事论事, 根据你的问题在Delphi中和C中的解决方案没什么两样.
var
  a: Pointer;   // 或者任何其他指针类型
begin
  GetMem(a, 10); // 分配10字节
  PInteger(a)^ := Integer(Form1);  // 将form1(其实Delphi中所有的类都可以认为是指针)
                                // 保存到a[0..3]中
                                // 这里是和C的区别, Delphi中需要进行指针类型转换, 
                               // 主要是为了"欺骗"编译器, 免得程序无法编译通过.
  (PChar(a)+SizeOf(Integer))^ := ’B’; // a[4]中保存一个字符’B’
  ....
end;

上一页123下一页

作者:网络 来源:转载
共有评论 0相关评论
发表我的评论
  • 大名:
  • 内容:
  • 盒子文章(www.2ccc.com) © 2023 版权所有 All Rights Reserved.
  • 沪ICP备05001939号