golang slice a 的地址和a[0]的地址不一样
2021/4/26 18:28:23
本文主要是介绍golang slice a 的地址和a[0]的地址不一样,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
https://studygolang.com/topics/10399
-------------------
var a = []int{1,2,3} fmt.Printf("%p\n", &a) b :=a fmt.Printf("%p\n",&b) // 问题1、为什么b的地址跟a不同,他们不是共享底层数组吗? b = append(b,0) fmt.Printf("%p\n", &b) // 问题2、为什么b的地址维持不变?append时b的长度不够应该重新分配了内存空间吧 fmt.Println(a) fmt.Println(b)
--------------
谢谢,这两个问题我已经弄清楚了
问题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操作前后是不一样的。
这篇关于golang slice a 的地址和a[0]的地址不一样的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-26解决google chrome helper 内存占用较高!
- 2024-04-01got an unexpected keyword argument
- 2024-03-30维多利亚的秘密 golang入坑系统
- 2024-03-29mongodb sort by date
- 2024-03-29go swagger
- 2024-03-25mongodb cdc
- 2024-03-25how to use go in vscode
- 2024-03-22mongooseserverselectionerror: connect econnrefused ::1:27017
- 2024-03-21pymongo insert_many
- 2024-03-18projection mongodb