说到指针,是真的恶心,JAVA中是没有指针存在的,但是在Go语言中和C是一样的,有指针的存在,但是Go 语言中指针是很容易学习的,Go 语言中使用指针可以更简单的执行一些任务。
变量是一种使用方便的占位符,用于引用计算机内存地址
Go 语言的取地址符是 &,放到一个变量前使用就会返回相应变量的内存地址。
这也是之前演示过的那个值类型和引用类型,没有理解的可以去前面看已一下就可以了。
我们可以打印一下这个变量试试
打印结果出来之后肯定就是一个地址值而不是10
而什么是指针呢,我们可以去百度一下,然后再和GO语言的指针做个对比理解一下。
百度百科是这么说的
而 Go语言一个指针变量指向了一个值的内存地址。这是Go语言中指针的解读。
也就是说,类似于变量和常量,在使用指针前你需要声明指针。
声明格式如下:
var var_name *var-type
var-type 为指针类型,var_name 为指针变量名,
* 号用于指定变量是作为一个指针。
var ip *int /* 指向整型*/
var fp *float32 /* 指向浮点型 */
上面的两个一个是指向 int的指针,一个是指向float32的指针
指针使用流程:
- 定义指针变量。
- 为指针变量赋值。
- 访问指针变量中指向地址的值。
写个Demo实例试试
看一下执行结果,肯定是一样的地址值的
还有就是他是允许存在空指针的,这个我就想到了JAVA中的nullpoint了,虽然JAVA中没有指针,但是它是有引用的,所以会出现空指针异常的情况。
当一个指针被定义后没有分配到任何变量时,它的值为 nil。
nil 指针也称为空指针。
nil在概念上和其它语言的null、None、nil、NULL一样,都指代零值或空值。
一个指针变量通常缩写为 ptr。
Demo结果肯定是不会出问题的,但是结果有点想不到
而且也可以最空指针做出判断的
if(ptr != nil) /* ptr 不是空指针 */
if(ptr == nil) /* ptr 是空指针 */
以上就是简单的Go指针,下次再说一下Go的指针数组
我们先看个实例
实例运行结果如下
有时候,我们可能需要保存数组,这样我们就需要使用到指针。
整型指针数组声明:
var ptr [MAX]*int;
ptr 为整型指针数组。因此每个元素都指向了一个值。以下实例的三个整数将存储在指针数组中:
实例执行结果