slice地址问题

peachestao · 2019-11-10 22:11:33 · 1732 次点击
更多评论

我的理解: 切片 b的声明写法 b:=a[:] ,你的写法相当于值传递,所以内存地址不一样。

#1
peachestao
一天一点点 从今天开始从现在开始

谢谢,这两个问题我已经弄清楚了

问题1:

b:=a //把a赋值给b,系统会给b分配一个地址,指向的底层数组跟a是一样的 fmt.Printf("%p\n",&b) //输出的是b变量本身的地址,而不是底层数组的地址,如果 fmt.Printf("%p",&b[0])打印,发现结果和&a[0]是一样的的,证明a和b共享底层数组内存

问题2:

b=append(b,0) fmt.Printf("%p\n",&b) //b变量的地址没有变,而是b指向的底层数组内存地址变了,如果 fmt.Printf("%p",&b[0])打印,发现append操作前后是不一样的。

#2