zoukankan      html  css  js  c++  java
  • Golang指针解析

    一.简单说明

    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这种写法是非法的。
    参考:https://segmentfault.com/a/1190000021680265

  • 相关阅读:
    训练20191009 2018-2019 ACM-ICPC, Asia East Continent Finals
    [学习笔记] 有上下界网络流
    [HDU4609] 3-idiots
    [HDU1402] A * B Problem Plus
    [HNOI2017] 礼物
    训练20191007 2017-2018 ACM-ICPC Latin American Regional Programming Contest
    [ZJOI2014] 力
    训练20191005 2017-2018 ACM-ICPC Asia East Continent League Final
    [一本通学习笔记] 树链剖分
    [一本通学习笔记] 快速幂
  • 原文地址:https://www.cnblogs.com/yuhaohao/p/14721548.html
Copyright © 2011-2022 走看看