跳转到内容

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 会自动将任何指针类型转换为字节指针。此外,对象和数组可以赋值给字节指针。对于对象,指针将包含对象第一个字段的地址。对于数组,指针将包含数组第一个元素的地址。

在将对象赋值给指针时要非常小心,因为垃圾收集器可能会在您完成指针操作之前 “回收” 对象!建议您在将对象转换为指针的代码周围使用 GCSuspendGCResume

您还可以显式地将指针转换为其他指针,以及转换为 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 还支持指针算术,使用标准的 +- 运算符。

华夏公益教科书