理解 Go 指针

栏目: C · 发布时间: 7年前

内容简介:#指针变量存储的是一个值,但是这个值在内存中有一个地址,而指针保存的就是这个地址,通过这个地址,可以获取到值。看例子:

#指针

变量存储的是一个值,但是这个值在内存中有一个地址,而指针保存的就是这个地址,通过这个地址,可以获取到值。

看例子:

func main(){

	var a int = 123

	p := &a 

	fmt.Println(*p)

}

上面例子中,首先定义的了一个 a 变量,值为: 123

其后通过 & 符号,为 a 生成一个指针,其实就是内存地址

最后,通过 * 符号可以将 p 指针的值给取出来

这个过程兜兜转转又回来原点,其实这么做的目的是为了能获取到 a 变量的原始值。

因为给函数传递的参数是对变量的建立副本,简单来说就是 a 变量赋值给另外一个变量,对这个副本变量修改不会影响到 a 变量。

而有些时候想要获取到原始值,就可以这么做。

其实这样可以实现钩子的设计模式,不修改其它代码,通过修改原始值,就可以影响程序的运行结果,这是钩子的价值所在。

另外指针也是有类型的,比如上面的例子,由于 a 变量是一个 int 类型,所以指针 p 的类型是一个 int 类型的指针,通过打印可以获取到类型: *int

fmt.Printf("%T", p) // *int

fmt.Printf("%T", *p) // int

第一个输出是输出 p 的类型,第二个输出是已经取出来的值的类型

Go 语言中还可以通过 new() 函数对指针类型创建一个指针,例子如下:

a := new(string)

*a = "修改 a 指针的原始值"

fmt.Printf("%T", a)

输出 *string , 是一个 string 类型的指针

通过 new() 方式创建的指针,都会有一个默认值,就是对应类型的零值

以上就是对 Go 指针的理解,有不同见解的欢迎评论。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

老二非死不可

老二非死不可

方三文 / 机械工业出版社 / 2013-12 / 39.00

关于投资 价值投资者为啥都买茅台? 怎样识别好公司与坏公司? 做空者真的罪大恶极吗? 国际板对A股会有什么影响? 波段操作,止损割肉到底靠不靠谱? IPO真的是A股萎靡不振的罪魁祸首吗? 关于商业 搜狐的再造战略有戏吗? 新浪如何焕发第二春? 百度的敌人为什么是它自己? 我为什么比巴菲特早两年投资比亚迪? 民族品牌这张牌还靠谱......一起来看看 《老二非死不可》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具