位元詩人 [Nim] 程式設計教學:參考 (Reference) 和指標 (Pointer)

Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email

指標 (pointer) 儲存的不是資料,而是指向資料的記憶體位置。Nim 的指標有兩種,一種是會自動回收記憶體的指標 (即 ref),一種是需自行回收記憶體的指標 (即 ptr),預設情形下會使用前者。

以下例子建立一個指向整數的指標:

var n = new(int)

n[] = 3
assert(n[] == 3)

我們也可以將語法稍微換一下,但是效果相同:

var n: ref int
new(n)

n[] = 3
assert(n[] == 3)

以下例子建立一個需自行回收記憶體的指標:

var n = cast[ptr int](alloc(sizeof(int)))

n[] = 3
assert(n[] == 3)

dealloc(n)

指標也像資料般,可以指派給另一個變數:

var p = new(int)

p[] = 3
var q = p
assert(q[] == 3)

q[] = 5
assert(p[] == 5)

在 Nim 的套件中看到 xxxRef 大概就是有用到指標,如下例:

import tables

var hash = {"one": "eins", "two": "zwei", "three": "drei"}.newTable
var hashRef = hash

hashRef["four"] = "vier"
assert(hash.hasKey("four"))
關於作者

位元詩人 (ByteBard) 是資訊領域碩士,喜歡用開源技術來解決各式各樣的問題。這類技術跨平台、重用性高、技術生命長。

除了開源技術以外,位元詩人喜歡日本料理和黑咖啡,會一些日文,有時會自助旅行。