Go指针的复习

因为c++启蒙的阴影,我一直尽量避免使用指针。但是在Go中,我发现很多地方都需要使用指针(甚至必须使用指针)来让程序变得更加灵活可靠。

因此这次我来复习(学习)一下指针的使用。

 

1.如何获取变量地址

每一个变量是一个内存位置,每个存储单元都有其定义的地址,可以用符号(&)运算符,它表示一个内存地址进行访问。

输出结果为:

即a的内存地址。

2.如何使用指针?

指针的基本声明格式为:

如果想要声明一个string类型的指针,那就:

指针需要指向一个内存地址,可以像这样把b指针指向a的内存地址,然后通过*将指针指向地址中的变量值取出来

输出结果为:

3.nil指针

上面的那种情况,是让指针b指向了a的地址。但是如果不让b指向任何地址,将会发生什么?

输出结果为:

因为a和b指针都没有指向任何地址,所以其值为nil

此时,如果使用fmt.Println(*a)去获取指针a指向地址的变量值,就会报错如下

为了防止出现这种错误,可以对指针是否为nil进行判断

4.指针数组

这是一个普通的数组,直接遍历这个数组:

如果使用指针去遍历这个数组:

5.指针的指针

指针指向的是一个变量在内存中的地址。如果声明一个指针,那么这个指针也会在内存中开辟一块区域。那么,可以有另外一个指针指向这个指针的内存吗?

如果要让一个指针指向另外一个指针,必须将其声明成指针的指针

普通指针的声明:var x *string

指针的指针的生命:var y **string

看字面上也是挺好理解的,这里有个示例:

输出结果为:

只要指针的概念理解得比较好,那么指针的指针的理解应该也不成问题。

6.传递指针到函数

这里要涉及实际使用的部分了。go支持将指针传递给函数。要做到这一点,要声明函数参数为指针类型。

输出结果为:

7.总结

在go的实际应用中,指针用得很多。必须熟练掌握。

发表评论

电子邮件地址不会被公开。 必填项已用*标注