我们知道对于golang来说,&a表示取a的地址,*a
表示取a的值
var 指针变量名 *变量类型 = &数据变量名
指针的定义
var a int = 10
//fmt.Printf("%p\n", &a)
// 定义指针变量存储变量的地址
var p *int = &a
//fmt.Printf("%p\n", p)
//通过指针间接修改变量的值
//写操作
*p = 123
指针的使用
//定义指针 指向数组 数组指针
//自动推导类型创建数组指针
//指针和数组建立关系
arr := [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
var p *[10]int
p = &arr
//通过指针间接操作数组
for i := 0; i < len(p); i++ {
fmt.Println(p[i])
}
这就是为什么下面绑定指针的时候是*Student而不是&Student
type Student struct{
Name string
}
func (s * Student) Set(name string){
s.Name = name
}
直接说答案:这是因为定义指针与取指针不一样导致的,golang定义指针是var b *int,取地址用的是&a,一个是定义,一个是操作。
上例中相当于新定义了一个变量s,它是指针变量。