前言
最近跟着青训营在学习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…
下面对上面的代码做一个简单的分析
主要是看swap()
函数:实现的功能就是,输入两个数字,然后交换这两个数字的值
首先是定义了两个变量,a
和b
,都是int
指针类型
然后定义了一个临时变量t
,用来做一个中间转换的桥梁
紧接着,将 *b
的指针赋值给*a
,这里的操作是为了交换指针
因为这个时候,t
变量就是之前的*a
,所以再将t
赋值给*b
,就相当于将原来的*a
给了*b
,结合上面的步骤,做到了一个指针的交换
那么,怎么获取一个变量的指针地址呢?
就是需要用到&
关键字,就像主函数的时候,定义了两个变量x
和y
,然后调用swap()
函数的时候,使用了关键字,目的就是获取变量的指针地址,最终打印两个变量的值
最后运行一下,我们可以看到,变量x
和y
交换了值~
结语
这是我对指针的一个简单的理解,理解了这个,可以在阅读源码的时候更加理解其中的道理,最近进度很快,感觉有点跟不上,不过没事,我们可以学习完之后,自己去查找一些资料~
也可能是因为我第一次接触go
大家加油吧~~