指針
1、簡單的定義一個指針
package main import "fmt" func main(){ var p *int i :=2 p = &i fmt.Println("memory address i:",p) } //執行結果: memory address i: 0xc42000a2e0
2、打印指針的值
package main import "fmt" func main(){ var p *int i :=2 p = &i fmt.Println("memory address i:",p) fmt.Println(*p) } //執行結果: memory address i: 0xc42000a2e0 2
3、指針賦值
package main import "fmt" func main(){ var p *int i :=2 p = &i fmt.Println("memory address i:",p) fmt.Println(*p) *p = 3 fmt.Println(*p) fmt.Println(i) } //執行結果: memory address i: 0xc42000a2e0 2 3 3 //我們發現*p 和 i的值都變了,因爲指針地址是一個。
4、指針值拷貝與指針值更改
package main import "fmt" func changValue(x int){ x = 20 } func changValueNow(x *int){ *x = 20 } func main(){ var p *int i :=2 p = &i fmt.Println("memory address i:",p) fmt.Println("memory address p:",&i) fmt.Println(*p) *p = 3 fmt.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 main import "fmt" func changValue(x int){ x = 20 } func changValueNow(x *int){ *x = 20 } func main(){ var p *int i :=2 p = &i fmt.Println("memory address i:",p) fmt.Println("memory address p:",&i) fmt.Println(*p) *p = 3 fmt.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中沒有指針的運算操作。