Go 之基础速学 (四) golang 里面的指针的理解和实操

指针?搞php的同学们可能比较陌生,搞过java或者c的同学们可能比较熟悉,由于各种原因,指针对于使用面向对象编程的现代程序员来说可能都很陌生,不过我们这里对此会进行讲解和解释;
程序在内存当中存储它的值,每个内存块有一个地址,通常用十六进制数表示,如:0x6b0820 变量通过内存地址可以找到内存块里面的值 如下图所示:
Go 之基础速学 (四) golang里面的指针的理解和实操
golang里面通过&符号获取变量的内存地址 *获取内存地址上的值

 //指针符号讲解 案例一
 var name string = "huxiaobai"
 fmt.Print(&name) //表示去地址 内存当中的地址 16进制的
 fmt.Print(*&name) //表示先&name取内存地址然后*取出&name地址上的值 和fmt.print(name)的值是一样的
 //看到*好就是取值或者设置值  看到&符号就是读内存地址

讲到这还是没明白指针是个什么东西?
指针的声明,一个指针变量指向了一个值的内存地址 指针其实是直接指向内存地址的
指针声明格式如下:

var var_name *var-type
var-type为指针类型,var_name为指针变量名称, *号用于指针变量是作为一个指针;
var ip *int   表示指向整型
var fp *float32 表示指向浮点型

迷糊啦吧,脑袋瓜子嗡嗡的吧?
看个案例吧,仔细看里面的注释哈

//指针的具体使用 案例二
  //每个变量都是存储在内存块当中 每个内存块都有一个内存地址 这个内存地址当中存在一个特殊的数据类型叫做指针
  //声明指针 name表示指针的名称 *string表示这是一个指向string类型的指针也就是所指向的内存地址当中的值是string类型
  var name *string
 //上边只是生命指针 使用new来产生一个内存地址 指向一个内存块 目前内存块当中值是空的  在没有new之前是一个nil空
  name = new(string)
 //为指针指向的内存块当中塞入值 *除了取值还有设置值的功能
  *name = "wocao"
 //*name取出name指针指向的内存地址上的值
  fmt.Print(*name)

再看个案例,还是好好看里面的注释哈:

//指针的具体使用 案例三
  //常规的定义变量 没啥好说的
  num := 20
  //定义指针变量 并且指针类型为int类型 这话上边解释过
  var anum *int
  //&符号可以获取内存地址 并复制给了指针
  anum = &num
  //anum的指针指向了内存地址指向的内存款 通过*获取内存地址上的值
  fmt.Print(*anum)

案例看懂了自然就懂了,不懂的话啊看手册:4.9. 指针《Go 入门指南》

Go 之基础速学 (四) golang 里面的指针的理解和实操

本作品采用《CC 协议》,转载必须注明作者和本文链接
胡军
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!