关于切片的地址问题

Chaoxin · 2020-11-23 15:47:28 · 1458 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2020-11-23 15:47:28 的主题,其中的信息可能已经有所发展或是发生改变。

func main() {
    months := []string{1: "January"}
    fmt.Printf("%p,\n",&months)                //0xc0000ae040,
    fmt.Printf("%p,\n",months)                //0xc0000ae060,
    fmt.Printf("%p,\n",&months[0])           //0xc0000ae060,
}

我知道第二个和第三个打印函数指向的是底层数组的第一个元素的地址。 但是我想问的是第一个打印函数中打印的地址指向的是什么? 对切片这个引用类型(本身传递的就是地址)取地址会取到什么呢? (我在stackoverflow上看到回答是指向slice的header。我的疑惑是这个header如果表示的是slice结构体,但是slice结构体的第一个成员变量就是数组的指针,那么结构体的地址不就是第一个成员变量的地址吗,不就是底层数组的第一个元素吗?)


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

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

1458 次点击  
加入收藏 微博
8 回复  |  直到 2020-11-26 11:24:04
rwy-aha-QWQ
rwy-aha-QWQ · #1 · 4年之前

变量:我啪的一下就站起来了,很快啊! 我不配有一席之地嘛=。=

aiocn
aiocn · #2 · 4年之前
rwy-aha-QWQrwy-aha-QWQ #1 回复

变量:我啪的一下就站起来了,很快啊! 我不配有一席之地嘛=。=

指针:年轻人不讲武德

focusonline
focusonline · #3 · 4年之前
aiocnaiocn #2 回复

#1楼 @rwy-aha-QWQ 指针:年轻人不讲武德

网红大师,你耗子尾汁

golang_007
golang_007 · #4 · 4年之前

指针让人头疼啊 type slice struct { array unsafe.Pointer -> 指向真正的字符串地址 len int cap int } array是一个对象也有地址。 array 0xc0000ae040 array【0xc0000ae060 】 。。。 。。。 0xc0000ae060 【“January” 】

Chaoxin
Chaoxin · #5 · 4年之前
golang_007golang_007 #4 回复

指针让人头疼啊 type slice struct { array unsafe.Pointer -> 指向真正的字符串地址 len int cap int } array是一个对象也有地址。 array 0xc0000ae040 array【0xc0000ae060 】 。。。 。。。 0xc0000ae060 【“January” 】

谢谢你,理解了

rwy-aha-QWQ
rwy-aha-QWQ · #6 · 4年之前
ChaoxinChaoxin #5 回复

#4楼 @golang_007 谢谢你,理解了

这是我的回答不易理解嘛=。=

GotoLove-LoonGL
GotoLove-LoonGL · #7 · 4年之前
rwy-aha-QWQrwy-aha-QWQ #6 回复

#5楼 @Chaoxin 这是我的回答不易理解嘛=。=

形象生动

love477
love477 · #8 · 4年之前

年轻人:指针不讲武德,上来就偷袭我这个20多岁的年轻人

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