理解 Go 指针

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

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

#指针

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

看例子:

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 指针的理解,有不同见解的欢迎评论。


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

查看所有标签

猜你喜欢:

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

Writing Windows VxDs and Device Drivers, Second Edition

Writing Windows VxDs and Device Drivers, Second Edition

Karen Hazzah / CMP / 1996-01-12 / USD 54.95

Software developer and author Karen Hazzah expands her original treatise on device drivers in the second edition of "Writing Windows VxDs and Device Drivers." The book and companion disk include the a......一起来看看 《Writing Windows VxDs and Device Drivers, Second Edition》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

URL 编码/解码
URL 编码/解码

URL 编码/解码