zoukankan      html  css  js  c++  java
  • Go指针相关

     

    结合这个例子分析一下

    结果:

    结合以往C语言的基础,画了一张图来解释为什么会有上面这些值的出现。先查看下Go中的这两个运算符是啥吧。

    ①对于所有带a的结果

    var a int = 1 定义了一个变量a值为1,如下图所示:

    &a就是这个存放a变量值的地址

    *&a 就是指向&a的一个指针,*&a = a = 1

    ②所有带b结果

    var b *int = &a

    类似C语言的 int *b = &a 定一个指向整形变量的指针b,b指向了a的地址

    所以:

    b = &a = 0xc04203c1d0

    &b = 0xc042058018 &b是b这个指针变量的真实地址,就是执行后那个

    *&b = *(&b) = b = &a = 0xc04203c1d0

    *b = *&a = a = 1

     

    ③所有带c的结果

    如上图所示:

    var c **int = &b

    实际上是定义了一个指向整形指针的指针变量

    c = &b = 0xc042058018

    *c = *&b = b = &a = 0xc04203c1d0

    &c 是这个变量的真实地址,这里显示的就是运行的结果 0xc042068020

    *&c 有经验可以发现 *&直接消掉了 = c = 0xc042058018

    **c咋一看不知道是什么,其实可以通过换算来进行求值

    **c = **&b = *b = *&a = a = 1

    ***&*&*&*&*&c 这个可以先消去*& **c = 1

     

    ④关于x

    x = *b = *&a = a = 1

    以上总结一下:

    &通过变量取地址 * 通过地址取值

    &a先得到地址,然后“ * xxx地址”得到该地址处变量的值,即a

    *&可以抵消

  • 相关阅读:
    C 栈和堆的区别
    ubuntu 12.10 禁用触摸板
    完美解决 linux sublime 中文无法输入
    gdb 断点调试C程序
    归并排序
    算法效率表示
    sublime -text 删除已安装插件
    MSSQL数据库表索引碎片整理优化性能
    Rdlc报表出现空白页解决方法
    RDLC报表:每页显示N条记录
  • 原文地址:https://www.cnblogs.com/dcz2015/p/10096503.html
Copyright © 2011-2022 走看看