BlitzMax/语言/指针
外观
BlitzMax 支持 "C" 语言风格的指针,用于需要执行低级操作系统交互或需要速度敏感代码的代码。
不建议在一般情况下使用指针,因为指针的误用很容易导致内存损坏,从而导致各种错误和头痛!
通过在变量或函数声明的类型后面添加 Ptr 来声明指针。例如
Local int_Ptr:Int Ptr
请注意,指针仅支持基本数值类型:Byte、Short、Int、Long、Float 和 Double。
Varptr 运算符允许您查找变量的地址,从而产生一个指针。例如
Local an_int:Int=10 Local int_ptr:Int Ptr=Varptr an_int
使用数组风格的索引来取消引用指针
Local an_int:Int=10 Local int_ptr:Int Ptr=Varptr an_int Print int_ptr[0]
BlitzMax 会自动将任何指针类型转换为字节指针。此外,对象和数组可以赋值给字节指针。对于对象,指针将包含对象第一个字段的地址。对于数组,指针将包含数组第一个元素的地址。
在将对象赋值给指针时要非常小心,因为垃圾收集器可能会在您完成指针操作之前 “回收” 对象!建议您在将对象转换为指针的代码周围使用 GCSuspend 和 GCResume。
您还可以显式地将指针转换为其他指针,以及转换为 Int 和从 Int 转换。例如
Local an_int:Int=10 Local int_ptr:Int Ptr=Varptr an_int Local float_ptr:Float Ptr=Float Ptr int_ptr Local var_address:Int=Int float_ptr
注释:BlitzMax 还支持指针算术,使用标准的 + 和 - 运算符。