Go 语言入门 07—指针
指针
在 go 语言中,每一个变量在运行时都会拥有一个地址,这个地址代表的就是变量在内存中的位置,而指针就是指向这个地址的变量。使用 go 语言中的指针很简单,只需要记住两个关键字符,&
(取地址符)和*
(取值符)。
取地址符
取地址符的使用很简单,只需要在变量前面加上取地址符&
即可取到该变量在内存中的地址,保存地址的变量就称为指针。
运行结果:每个人的运行结果不一样,只要打印的是如下格式的内容表示成功。
取值符
通过上面的取地址符能够取出变量 a 在内存中的地址,然后通过地址同样可以取出变量对应的值,取值符*
使用在第一步取出的地址变量之前即可取出对应的值。
此时的指针 b 中保存的就是变量 a 在内存中的地址,变量 b 此时的类型为*int
,称作 int 的指针类型,通过取值符*b
则可以取到 b 地址对应的变量值。
运行结果:
指针声明
go 语言中的值类型int float32 string
等都有其对应的指针类型:*int *float32 *string
,在声明指针时,需要使用到指针类型。
语法:
代码示例:
上面定义了一个指针 a,但是指针 a 没有分配到变量时,其值就为 nil,称之为空指针。
直接给指针赋值:
如果如上所示直接运行,代码会产生报错,报错信息如下,报错原因是在 Go 语言中对于引用类型的变量,在使用的时候不仅要声明,还要为其分配内存空间,否则赋的值就没办法存储。而对于值类型的声明不需要分配内存空间,是因为它们在声明的时候已经默认分配好了内存空间。
new
函数签名:
使用 new 函数时,传入一个类型,返回一个指向该类型内存地址的指针,使用 new 得到的指针其对应的值为该类型的默认值。
上面的var a *int
只是声明了一个指针并没有初始化分配内存空间,所以才会报错,如果使用 new 进行初始化指针就没有问题了。
运行结果:
版权声明: 本文为 InfoQ 作者【良猿】的原创文章。
原文链接:【http://xie.infoq.cn/article/f63cf6f3b80d89640d11277a0】。文章转载请联系作者。
评论