針對golang中的指針夺衍,當時理解有些誤區(qū)狈谊,現(xiàn)寫文檔來進行說明
想要做的事情是交換兩個變量的值,即常用的Swap函數(shù),以下兩段代碼來說明下理解問題:
錯誤示例
package main
import (
"fmt"
)
func main() {
a := 1
b := 2
swap2(&a,&b)
fmt.Println(a)
fmt.Println(b)
}
func swap2(pa *int , pb *int) {
var temp *int
temp = pa
pa = pb
pb = temp
}
這里的交換河劝,想法是指針指向的內(nèi)容不變壁榕,但是指針的地址相互交換,從而達到目的赎瞎,畫圖來說明:
圖1
我們可以看到牌里,從左下到右下的過程中,函數(shù)返回后tempA的值并沒有返回給PA务甥,因此這個交換沒有任何意義牡辽,僅僅是地址的值交換
正確示例
package main
import (
"fmt"
)
func main() {
a := 1
b := 2
swap1(&a,&b)
fmt.Println(a)
fmt.Println(b)
}
func swat1(pa *int , pb *int) {
var temp int
temp = *pa
*pa = *pb
*pb = temp
}
其中,圖片是這個樣子的
圖2
大概就是在過程中改變了指針指向的值敞临,然后指針按照原來的地址來尋找內(nèi)容态辛,而內(nèi)容進行了替換,這一點和c是一樣的