```go
type Person struct{
name string
age int
}
func main(){
p1:=“123”
p2:=&p1
fmt.Println(p2)//打印出0xc21001e140
p3:=&Person{“ZhangSan”,18}
fmt.Println(p3)//打印出&{ZhangSan 18}
}
```
**为什么这里结构体指针打印出的是`&{}`的形式,而不是像`*int`、`*string`这些类型一样,打印出的是内存地址**
```go
type Person struct{
name string
age int
}
func setStruct (v *Person){
v.name = “LiSi”
v.age = 20
}
func main(){
p:=Person{“ZhangSan”,18}
setStruct(&p)
fmt.Println(p)//打印出{LiSi 20}
}
```
**函数setStruct参数是一个结构体指针,为什么在函数中赋值时,不是用`*v.name`进行赋值而是直接用`v.name`**
```go
type Person strcut(){
name string
age int
}
func (p *Person) changeName(){
p.name = “Lisi”
}
func main(){
p1:=Person{“ZhangSan”,18}
p1.changeName()
fmt.Println(p1)//打印出{Lisi 18}
}
```
**方法`changeName`中的接收器(`p *Person`)是一个结构体指针,为什么在调用这个方法时,不用`&p1.changeName()`就可以调用方法**
有疑问加站长微信联系(非本文作者)