介绍
在go中指针就是申明一个指针类型的变量,它指向了一个内存地址
定义方式:
func main() {
name := "张三"
n1 := &name
n2 := *n1
fmt.Println(n1)//0xc0000301f0 内存地址
fmt.Println(n2)//张三 内存地址的值
}
上面代码有两个关键符号:& : 取地址,* : 取值
申请内存方式还有new:
func main() {
name := new(string)
fmt.Println(name)
*name = "李四" //内存地址:0xc0000301f0
fmt.Println(*name) //值:李四
}
这种定义方式与第一种的区别:
func main() {
name := new(string)
fmt.Println(name) //0xc0000881e0 存在new的时候已经分配了内存地址
var name2 *string
fmt.Println(name2) //nil 没有分配内存地址
}
还有一种make也可以申请内存:
name := make([]string,3)
new和make的区别
func main() {
name := new(string)
fmt.Println(name) //0xc0000881e0
name3 := make([]string, 2)
fmt.Println(name3) //[ ]
}
new(类型):只适用单一类型(string,int之类的),返回括号内类型的指针,new(string) 就是返回string类型的指针
make:适用于slice, map 或者 channel 初始化,make是直接返回的类型值