跳轉到內容

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 還支援指標算術,使用標準的 +- 運算子。

華夏公益教科書