Golang指针
基本使用
func main() {
i := 20
p := &i //var p *int = &i
fmt.Println("i的地址",&i)
fmt.Println("指针变量p",p)
fmt.Println("指针变量的值",*p)
-------------------
a := 20
var b *int = &a
fmt.Printf("%p
",&a)
fmt.Printf("%p",b) //指针变量存储的地址
fmt.Printf("%p",&b)// 访问指针变量的地址
}
修改值
func main() {
var num int32 = 20
var p *int32 = &num
*p = 100 //使用指针变量访问存储的地址, 修改存储的地址
fmt.Printf("*p = %d, num = %d",*p,num) // 100, 100
}
func main() {
var a,b int = 20,10
var p1,p2 *int = &a,&b
*p1 = 200
*p2 = 100
fmt.Printf("a = %d, b = %d, *p1 = %d, *p2 = %d",a,b,*p1,*p2)
}
注意
值传递会复制一份,在函数修改后不会对外部的值产生影响
func trans( inter interface{}){
//由于是值传递,所以这里取到的地址值不相同
p:=&inter
fmt.Println(p)//0xc00003a1f0
*p=10
}
func main() {
num := 20
fmt.Println(&num)//0xc00000a0f8
trans(&num)
fmt.Println(num)//20
}