指針
1、簡單的定義一個指針
package?mainimport?"fmt"func?main(){var?p?*inti?:=2p?=?&ifmt.Println("memory?address?i:",p) } //執行結果: memory?address?i:?0xc42000a2e0
2、打印指針的值
package?mainimport?"fmt"func?main(){var?p?*inti?:=2p?=?&ifmt.Println("memory?address?i:",p)fmt.Println(*p) } //執行結果: memory?address?i:?0xc42000a2e0 2
3、指針賦值
package?mainimport?"fmt"func?main(){var?p?*inti?:=2p?=?&ifmt.Println("memory?address?i:",p)fmt.Println(*p)*p?=?3fmt.Println(*p)fmt.Println(i) } //執行結果: memory?address?i:?0xc42000a2e0 2 3 3????//我們發現*p?和?i的值都變了,因為指針地址是一個。
4、指針值拷貝與指針值更改
package?mainimport?"fmt"func?changValue(x?int){x?=?20 }func?changValueNow(x?*int){*x?=?20 }func?main(){var?p?*inti?:=2p?=?&ifmt.Println("memory?address?i:",p)fmt.Println("memory?address?p:",&i)fmt.Println(*p)*p?=?3fmt.Println(*p)fmt.Println(i)changValue(i)fmt.Println("i?=",i)changValueNow(&i)fmt.Println("now?i:",i) } //執行結果: memory?address?i:?0xc42000a2e0 memory?address?p:?0xc42000a2e0 2 3 3 i?=?3??????????//傳過去3,改為20,打印i還是3?說明這種只是值拷貝并沒更改本身 now?i:?20??????//傳過去一個指針地址,將地址值改為20,打印i是20,傳遞指針內存地址修改將改變指針的值。
5、指針申明
package?mainimport?"fmt"func?changValue(x?int){x?=?20 }func?changValueNow(x?*int){*x?=?20 }func?main(){var?p?*inti?:=2p?=?&ifmt.Println("memory?address?i:",p)fmt.Println("memory?address?p:",&i)fmt.Println(*p)*p?=?3fmt.Println(*p)fmt.Println(i)changValue(i)fmt.Println("i?=",i)changValueNow(&i)fmt.Println("now?i:",i)pj?:=?new(int)??//使用new?創建一個int型的指針changValueNow(pj)fmt.Println("pj?=?",*pj) } //執行結果: memory?address?i:?0xc42000a2e0 memory?address?p:?0xc42000a2e0 2 3 3 i?=?3 now?i:?20 pj?=??20
6、golang中沒有指針的運算操作。
轉載于:https://blog.51cto.com/qiyishi/1902427