golang 指针浅析

小鬼No1 · · 1510 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

指针这个东西,不管是在哪个语言里,都算是比较难懂的概念,其实只要解释清楚,指针的概念并不难理解。

golang中打印地址的方法是:fmt.Printf("%p", x),x表示要打印的数据结构

package main

import "fmt"

func main() {
    ss := []string{"a", "b", "c"}
    //小张=你
    fmt.Printf("数据地址=%p,指针地址=%p\n", ss, &ss)

    ss1 := ss
    //张三=你
    fmt.Printf("数据地址=%p,指针地址=%p\n", ss1, &ss1)
    
    ss = []string{"d"}
    //小张=另外一个同事
    fmt.Printf("数据地址=%p,指针地址=%p\n", ss, &ss)
}

上述代码的打印结果:
数据地址=0xc04203bd70,指针地址=0xc04203e3c0
数据地址=0xc04203bd70,指针地址=0xc04203e440
数据地址=0xc0420381e0,指针地址=0xc04203e3c0

我们可以看到数据地址是一样的,但是变量本身的地址是不一样的。这个怎么理解呢?从生活的角度来解释可能比较容易:你在你的部门叫张三,也有人叫你小张,或者叫你小三,假定你是部门里唯一叫这些名字的,那张三,小张,小三都代表了你这个人。你这个人,就是我们上面说的数据地址,张三,小张,小三,都是指针变量,它们都指向你这个人。

指针指向是有可能变化的,例如部门里新来了一个姓张年龄比你小的同事张四,那么在你们部门中小张这个名字,指向就变成张四。

这里的假设有几个前提:

  • 限定在部门中,也就是一台主机。
  • 一个名字,只能指向一个人。也就是指针需要指向具体的一个数据

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

本文来自:简书

感谢作者:小鬼No1

查看原文:golang 指针浅析

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

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