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;