概念簡介
Go語言支持 指針,
允許在程序中通過引用傳遞值或者數據結構。
例程代碼
package main
import "fmt"
// 我們將通過兩個函數:`zeroval` 和 `zeroptr` 來比較指針和
// 值類型的不同。`zeroval` 有一個 `int` 型參數,所以使用值
// 傳遞。`zeroval` 將從調用它的那個函數中得到一個 `ival`
// 形參的拷貝。
func zeroval(ival int) {
ival = 0
}
// `zeroptr` 有一和上麵不同的 `*int` 參數,意味著它用了一
// 個 `int`指針。函數體內的 `*iptr` 接著_解引用_這個指針,
// 從它內存地址得到這個地址對應的當前值。對一個解引用的指
// 針賦值將會改變這個指針引用的真實地址的值。
func zeroptr(iptr *int) {
*iptr = 0
}
func main() {
i := 1
fmt.Println("initial:", i)
zeroval(i)
fmt.Println("zeroval:", i)
// 通過 `&i` 語法來取得 `i` 的內存地址,即指向 `i` 的指針。
zeroptr(&i)
fmt.Println("zeroptr:", i)
// 指針也是可以被打印的。
fmt.Println("pointer:", &i)
}
執行&輸出
# `zeroval` 在 `main` 函數中不能改變 `i` 的值,但是
# `zeroptr` 可以,因為它有這個變量的內存地址的
# 引用。
$ go run pointers.go
initial: 1
zeroval: 1
zeroptr: 0
pointer: 0x42131100
課程導航
學習上一篇:Go語言教程:遞歸 學習下一篇:Go語言教程:結構體
相關資料
本例程github源代碼:https://github.com/xg-wang/gobyexample/tree/master/examples/pointers