一篇文章带你了解Go语言基础之指针
时间:2025-11-05 02:50:03 出处:数据库阅读(143)

前言
Hey,篇文大家好呀,章带指针我是语言基星期八
作为21世纪的C语言,Go可能多方面思考,篇文最终还是章带指针保留了指针。
但是语言基要比C语言指针简单很多,一起来看看叭。篇文
引言
因为Go语言是章带指针类C语言,所以为了提高效率,语言基仍然保留了指针。篇文
但是章带指针如果没有接触过指针,可能学起来指针需要多多思考一下了。语言基
指针通常情况下,篇文也被称为小白劝退神奇。章带指针
基本类型指针的语言基理解
先看这两行代码。
var n1 int = 666 fmt.Println(n1)//结果:666 fmt.Printf("%p\n",n1)//结果:%!p(int=666),说明不是一个地址,就是一个值内存分布图如下。

再看看这样两行代码,这里用到了&。
var n1 int = 1 //表示取n1的地址 fmt.Println(&n1)//结果:0xc00000a0b8 fmt.Printf("%p\n",&n1)//结果:0xc00000a0b8如图所示。

如果这两个能理解,服务器租用恭喜你,指针已经会了一半了。
引用类型指针的理解
先看这样的代码。
var studentList = []string{"张三", "李四"}//一个切片 fmt.Println(studentList) //结果:[张三 李四] fmt.Printf("%p\n", studentList) //结果:0xc0000044a0 //去地址 fmt.Printf("%p\n", &studentList) //结果:0xc0000044a0内存分布图如下。

值类型和引用类型
值类型
在Go中,值类型主要有。
int,float,bool,string,数组,struct(结构体)
内存分布大致如下。

注:像字符串,数组,结构体这些属于连续存储,变量指向的是它们的第一个地址,剩下的会根据长度计算。
引用类型
在Go中,引用类型主要有。
切片(slice),map,管道(chan)
内存分布大致如下。

栈内存和堆内存的区别
栈内存在存储上,高防服务器只能存一些简单的东西,比如数字了,字符了,浮点数了之类的,但是栈内存分配的内存程序员不用回收,由系统自己回收,并且性能很高。
堆内存在存储上就比较丰富了,随便存,像map,随便塞,但是堆内存分配的内存需要程序员自己回收,典型例子,C++,如果语言由GC由GC回收,性能稍弱那么一点点点....,但是人家能随便存啊,多随便。
&和*的意思
&叫做取地址符。
*叫做收地址符吧。
示例
var c *int//*int是一个整体,说明c这个变量只能接收int类型的*int是一个整体,香港云服务器表示c这个变量只能接收int类型的地址。
代码
package main import "fmt" func main() { var c *int var d int = 1 //c = d//错误需要的是d的地址 c = &d fmt.Println(c) }执行结果。

可以看到打印的也是一个地址,但是内存图还是基本类型图。

如果要打印c的值,直接*c就好了,取得就是地址里面对应得值了。
fmt.Println(*c)关于函数
我们一直在强调,操作只会操作栈上面的值,函数同理。
package main import "fmt" func say1(x int) { //x int 相当于隐藏了一行代码 //隐藏的代码时 var x int = x,一定要记住这个 fmt.Printf("say1:%pn", x) } func say2(x *int) { //隐藏的代码是 var x *int = x,x是一个地址 fmt.Printf("say2:%pn", x) } func say3(x []int) { //隐藏的代码是 var x []int = x,因为x是引用类型,所以x是一个地址 fmt.Printf("say3:%pn", x) } func main() { say1(1)//栈上面是1,所以传进去就是1 var x1 = 1 say2(&x1)//say只能接收整数地址 var x2 = []int{1, 1} say3(x2)//x2是引用类型,所以传进去的时候就是地址,栈上面的就是地址 }执行结果。

总结
上述我们主要讲述了基本类型指针和引用类型指针,也叫做值类型和引用类型,并且画出了值类型和引用类型内存的本质区分图,后来又讲了&和*的区别,还有函数传参的本质是什么,希望对大家的学习有帮助。
如果在操作过程中有任何问题,记得下面留言,我们看到会第一时间解决问题。
本文转载自微信公众号「Go语言进阶学习」,可以通过以下二维码关注。转载本文请联系Go语言进阶学习公众号。

猜你喜欢
- 华为AR1200系列路由器(AR1200系列路由器产品特点及适用场景分析)
- 以新U盘装系统教程(详细步骤图文指导,轻松安装您的新系统)
- 如何使用U盘进行格式化操作(详细教程带你轻松搞定)
- JVCHA-FX10耳机的用户体验(探索高性价比音质及舒适佩戴的选择)
- 华硕B150M-Plus性能评测与推荐(一款稳定可靠的主板选择,华硕B150M-Plus的性能与功能介绍)
- i7GTX1060Ti(探索游戏世界的终极选择)
- 惠普Envy15ae021tx笔记本电脑的优势与特点(高性能处理器、卓越的显示效果和出色的设计与工艺)
- G90F25CN3L-C2(G1)(高效能芯片G90F25CN3L-C2(G1)为未来科技带来无限可能)
- 技嘉主板H61MS1——性能稳定可靠的选择(技嘉主板H61MS1的特点与优势)