Go指针的一个小小理解| 青训营

49 阅读2分钟

前言

最近跟着青训营在学习GO语言,觉得指针这里有点不太理解,后面查阅了一些资料,貌似是搞懂了,所以在这里做一个小笔记,加深自己的印象

正文

首先需要知道两个关键的关键符号 &*

*号修饰的是一个指针变量,例如下面的两个例子

var a *int        
var b *float32

这里就相当于定义了两个指针变量,一个是int一个是float32

因此可以看出,定义指针变量的语法是

var 变量名称 *变量类型

&是一个取地址符,放在变量前的话,用来取这个变量的内存地址

var a int = 10    
fmt.Printf("变量的地址: %x\n", &a  )

上面的代码就是定义了一个变量a,然后通过&a来取这个变量的地址

如何配合使用这两个操作符?

这里之前我一直没太理解,直到看到了一个小的代码片段,我认为这个还是比较清晰的

这个代码片段出自这里 c.biancheng.net/view/21.htm…

image.png

下面对上面的代码做一个简单的分析

主要是看swap()函数:实现的功能就是,输入两个数字,然后交换这两个数字的值

首先是定义了两个变量,ab,都是int指针类型

然后定义了一个临时变量t,用来做一个中间转换的桥梁

紧接着,将 *b的指针赋值给*a,这里的操作是为了交换指针

因为这个时候,t变量就是之前的*a,所以再将t赋值给*b,就相当于将原来的*a给了*b,结合上面的步骤,做到了一个指针的交换

那么,怎么获取一个变量的指针地址呢?

就是需要用到&关键字,就像主函数的时候,定义了两个变量xy,然后调用swap()函数的时候,使用了关键字,目的就是获取变量的指针地址,最终打印两个变量的值

最后运行一下,我们可以看到,变量xy交换了值~

结语

这是我对指针的一个简单的理解,理解了这个,可以在阅读源码的时候更加理解其中的道理,最近进度很快,感觉有点跟不上,不过没事,我们可以学习完之后,自己去查找一些资料~

也可能是因为我第一次接触go

大家加油吧~~