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语言基础,本文结构如下: 数据 本节包含了 Go 为变量分配内存的方式,和常用的数组,...
    张云飞Vir阅读 354评论 0 0
  • 抱佛脚一时爽,一直抱佛脚一直爽!这篇文章总结常见的c++面试问题~因为是抱佛脚,所以结构上没有什么逻辑...参考链...
    山幺幺阅读 738评论 0 0
  • 基础 [TOC] 特性 Go 并发编程采用CSP模型不需要锁,不需要callback并发编程 vs 并行计算 安装...
    蕪園樓主香獨秀阅读 265评论 0 0
  • Java 基础 语言特性 优点 ① 平台无关,摆脱硬件束缚,"一次编写,到处运行"。 ② 安全的内存管理和访问机制...
    续袁阅读 574评论 0 1
  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 7,589评论 16 22