golang结构体指针解析

回到未来丶 · · 3020 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

golang指针可以这样理解:本身为一个整型常量,但由于其声明时为指针,因此拥有了特殊的能力,即在其前增加 * ,即可直接访问内存编号为该整型常量的数据。而对于某个定义的常量,在前面加 & ,也可以获得数据的内存编号。
当我们定义结构体指针时,问题出现了:

type name int8
type first struct {
    a int
    b bool
    name
}
func main(){
    var type1 = first{1, false, 2}
    var type_pointer *first = &type1
    fmt.Println(type_pointer)
    }

上面的代码打印的结果为:
&{1 false 2}
由此可推论,结构体本身并没有代表其自身的内存地址,存在内存地址的是结构体内部的数据信息,只得打印出这样的数据。

因此,我们进行如下打印:

fmt.Println(&type_pointer.a, type_pointer.a, &type_pointer, (*type_pointer).a)

输出结果为:
0x110120f8 1 0x11006128 1

可以这样解释:
&type_pointer.a:等同于&(*type_pointer).a
type_pointer.a:等同于(*type_pointer).a
上面这两种可以理解为golang语言的简便写法写法(如果不这么理解没法解释输出),不推荐这样写,
&type_pointer:指针本身的内存地址
(*type_pointer).a:指针指向的结构体,该结构体内部的a数据

此外,类似于*type_pointer.a这种写法是非法的。


有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:回到未来丶

查看原文:golang结构体指针解析

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3020 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传