美思 [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"))
關於作者

身為資訊領域碩士,美思認為開發應用程式的目的是為社會帶來價值。如果在這個過程中該軟體能成為永續經營的項目,那就是開發者和使用者雙贏的局面。

美思喜歡用開源技術來解決各式各樣的問題,但必要時對專有技術也不排斥。閒暇之餘,美思將所學寫成文章,放在這個網站上和大家分享。