如上图所示,变量 b
的值为 156
,而 b
的内存地址为 0x1040a124
。变量 a
存储了 b
的地址。我们就称 a
指向了 b
。
三点需注意
1. &取地址符号
2. * 放在类型旁边,表示指向这个类型的指针
3. * 放在变量旁边,表示解引用(反解)
package main import "fmt" func main(){ a := 10 b := &a //b就是一个指针 fmt.Println(b) //a地址:0xc000058080 }
package main import "fmt" func main(){ var a *int fmt.Println(a) }
package main import ( "fmt" ) func change(val *int) { *val = 55 } func main() { a := 58 fmt.Println("value of a before function call is",a) b := &a change(b) fmt.Println("value of a after function call is", a) }
在上面程序中的第 14 行,我们向函数 change
传递了指针变量 b
,而 b
存储了 a
的地址。程序的第 8 行在 change
函数内使用解引用,修改了 a 的值。该程序会输出:
value of a before function call is 58 value of a after function call is 55