go基础(9)指针

介绍

在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是直接返回的类型值

你可能感兴趣的:(go基础(9)指针)