go语法:多重指针**
参考
https://blog.csdn.net/OldDriver1995/article/details/100550224
基本概念和关系
1,指针变量也是变量也有自己的内存地址,指针变量的值为另一个变量的地址
2,指针变量类型前面需要*,指针变量的值为&另一个变量(可以是指针变量)
3,&为取址运算符,只能放在变量(可以是指针变量和接口变量)前,不能放在地址(值)前面,不支持多重&&;;*为取值运算符,只能放在指针变量前面(不能是接口变量)获取地址对应的变量的值(该值仍可能是内存地址,所以可以多重取值**..)
4,接口,类型(数据类型),变量(类型变量,指针变量,接口变量),值(数据或地址),指针的关系;指针是一种特殊的变量,并且指针类型需要指定具体的值类型(地址对应值的类型,不能是接口类型)
5,一个变量的值到底是另一个指针变量还是普通值(只可能为这两种),取决于该变量类型是否为多层指针类型。只有指针才有这种特性;
6,不管是几层指针类型,指针变量的值都是地址而已,最后都要依托于普通变量的类型,只是多了一些映射关系
代码
func ptr1() { var a int = 5 var ptr1 *int ptr1 = &a fmt.Println(ptr1,*ptr1) } func ptr2() { var a int = 5 var ptr1 *int ptr1 = &a var ptr2 **int ptr2 = &ptr1 fmt.Println(ptr2,*ptr2,**ptr2,ptr1,*ptr1) } func ptr3() { var a int = 5 var ptr1 *int ptr1 = &a var ptr2 **int ptr2 = &ptr1 var ptr3 ***int ptr3 = &ptr2 fmt.Println(ptr3,*ptr3,**ptr3,***ptr3,ptr2,*ptr2,**ptr2) //多层指针变量可以多重取值 fmt.Println(&ptr2,&ptr1,&a)//不能多层取址,因为地址已经是值 fmt.Println(&a,*ptr2) //相等 fmt.Println(&ptr1,*ptr3)//相等 } 结果: 0xc00000a0a8 5 0xc000006030 0xc00000a0e0 5 0xc00000a0e0 5 0xc000006040 0xc000006038 0xc00000a0e8 5 0xc000006038 0xc00000a0e8 5 0xc000006040 0xc000006038 0xc00000a0e8 5 0xc00000a0e8 0xc00000a0e8 0xc000006038 0xc000006038
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?