指標是一種儲存變數記憶體位址(memory address)的變數。
接下來我們寫點**。
package main&import (
"fmt
")func main()
type of a is *int
address of b is 0x1040a124
由於 b 可能處於記憶體的任何位置,你應該會得到乙個不同的位址。
package mainimport (上面的程式中,"fmt
")func main()
}
b
b is通過下面的**,可以看到如何使用解引用。b after initialisation
is0x1040a124
package main import ("fmt
")func main()
address of b is我們再編寫乙個程式,用指標來修改 b 的值。0x1040a124
value of b
is255
package mainimport (
"fmt")
func main()
address of b is0x1040a124
value of b
is255
new value of b is
256
package mainimport (
"fmt
")func change(val *int
) func main()
value of a before function call is假如我們想要在函式內修改乙個陣列,並希望呼叫函式的地方也能得到修改後的陣列,一種解決方案是把乙個指向陣列的指標傳遞給這個函式。58value of a after function call
is55
package mainimport (
"fmt")
func modify(arr *[3]int
) func main()
modify(&a)
fmt.println(a)
}
a[x]
。下面我們用簡寫形式重寫以上**。
package main這種方式向函式傳遞乙個陣列指標引數,並在函式內修改陣列。儘管它是有效的,但卻不是 go 語言慣用的實現方式。我們最好使用切片來處理。接下來我們用切片來重寫之前的**。import (
"fmt")
func modify(arr *[3]int
) func main()
modify(&a)
fmt.println(a)
}
package maingo 並不支援其他語言(例如 c)中的指標運算。import (
"fmt")
func modify(sls
int)
func main()
modify(a[:])
fmt.println(a)
}
package mainfunc main()上面的程式會丟擲編譯錯誤:p := &b
p++}
main.go:6: invalid operation: p++ (non-numeric type *[3]int)
。
本文由 gctt 原創編譯,go 中文網 榮譽推出
Go 系列教程 第 20部分 併發入門
go 是並髮式語言,而不是並行式語言。在討論 go 如何處理併發之前,我們必須理解何為併發,以及併發與並行的區別。併發是指立即處理多個任務的能力。乙個例子就能很好地說明這一點。我們可以想象乙個人正在跑步。假如在他晨跑時,鞋帶突然松了。於是他停下來,系一下鞋帶,接下來繼續跑。這個例子就是典型的併發。這...
Microformats教程 第3部分
本文首發於 http www.lunaticsun.com article microformats three 目前,這個系列已經有兩篇文章了,它們是 什麼是microformats microformats教程 第1部分 microformats教程 第2部分 在這一部分中,我們將討論一種全新的...
MySQL系列,第1部分 Mysql簡介
mysql是乙個關係型資料庫管理系統 由瑞典 mysql ab 公司開發,目前屬於 oracle 公司。mysql 最流行的關係型資料庫管理系統 在 web 應用方面 mysql 是最好的 rdbms relational database management system,關聯式資料庫管理系統 ...