• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

go语法:多重指针**

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

参考

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

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
GO语言(一)安装与环境配置发布时间:2022-07-10
下一篇:
图解Go并发发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap