问题
1 | package main |
nil 切片和空切片指向的地址一样吗?这个代码会输出什么?
怎么答
- nil 切片和空切片指向的地址不一样。nil 空切片引用数组指针地址为 0(无指向任何实际地址)
- 空切片的引用数组指针地址是有的,且固定为一个值
1 | s1 pointer:{Data:0 Len:0 Cap:0}, s2 pointer:{Data:824634207952 Len:0 Cap:0}, s4 pointer:{Data:824634207952 Len:0 Cap:0}, |
解释
- 之前在前面的文章里提到过切片的数据结构为
1 | type SliceHeader struct { |
nil 切片和空切片最大的区别在于指向的数组引用地址是不一样的。
所有的空切片指向的数组引用地址都是一样的
文章推荐:
- 昨天那个在 for 循环里 append 元素的同事,今天还在么?
- 对已经关闭的的 chan 进行读写,会怎么样?为什么?
- 对未初始化的的 chan 进行读写,会怎么样?为什么?
- golang 面试题:reflect(反射包)如何获取字段 tag?为什么 json 包不能导出私有变量的 tag?
- golang 面试题:json 包变量不加 tag 会怎么样?
- golang 面试题:怎么避免内存逃逸??
- golang 面试题:简单聊聊内存逃逸?
- golang 面试题:字符串转成 byte 数组,会发生内存拷贝吗?
- golang 面试题:翻转含有
中文、数字、英文字母
的字符串 - golang 面试题:拷贝大切片一定比小切片代价大吗?
- golang 面试题:能说说 uintptr 和 unsafe.Pointer 的区别吗?