当前位置: 首页 > news >正文

连nil切片和空切片一不一样都不清楚?那BAT面试官只好让你回去等通知了。

在这里插入图片描述
连nil切片和空切片一不一样都不清楚?那BAT面试官只好让你回去等通知了。
问题

package mainimport ("fmt""reflect""unsafe"
)func main() {var s1 []ints2 := make([]int,0)s4 := make([]int,0)fmt.Printf("s1 pointer:%+v, s2 pointer:%+v, s4 pointer:%+v, \n", *(*reflect.SliceHeader)(unsafe.Pointer(&s1)),*(*reflect.SliceHeader)(unsafe.Pointer(&s2)),*(*reflect.SliceHeader)(unsafe.Pointer(&s4)))fmt.Printf("%v\n", (*(*reflect.SliceHeader)(unsafe.Pointer(&s1))).Data==(*(*reflect.SliceHeader)(unsafe.Pointer(&s2))).Data)fmt.Printf("%v\n", (*(*reflect.SliceHeader)(unsafe.Pointer(&s2))).Data==(*(*reflect.SliceHeader)(unsafe.Pointer(&s4))).Data)
}

nil切片和空切片指向的地址一样吗?这个代码会输出什么?

怎么答

nil切片和空切片指向的地址不一样。nil空切片引用数组指针地址为0(无指向任何实际地址)
空切片的引用数组指针地址是有的,且固定为一个值

s1 pointer:{Data:0 Len:0 Cap:0}, s2 pointer:{Data:824634207952 Len:0 Cap:0}, s4 pointer:{Data:824634207952 Len:0 Cap:0}, 
false //nil切片和空切片指向的数组地址不一样
true  //两个空切片指向的数组地址是一样的,都是824634207952

解释

  • 之前在前面的文章里提到过切片的数据结构为
type SliceHeader struct {Data uintptr  //引用数组指针地址Len  int     // 切片的目前使用长度Cap  int     // 切片的容量
}
  • nil切片和空切片最大的区别在于指向的数组引用地址是不一样的。
    在这里插入图片描述
  • 所有的空切片指向的数组引用地址都是一样的
    在这里插入图片描述
http://www.lryc.cn/news/165655.html

相关文章:

  • 前端构建工具 webpack 笔记
  • .Net MVC 使用Areas后存在相同Controller时报错的解决办法; 从上下文获取请求的Area名及Controller名
  • docker-compose部署etcd集群
  • 微信怎么定时发圈?
  • 记录造数据测试接口
  • 数据结构基础7:二叉树【链式结构】实现和递归思想。
  • [.NET 6] IHostedService 的呼叫等等我的爱——等待Web应用准备就绪
  • 基于jeecg-boot的flowable流程自定义业务退回撤回或驳回到发起人后的再次流程提交
  • python如何学习
  • Centos7更新php7.2版本升级
  • 操作系统学习笔记---计算机系统概述
  • uniapp H5 navigateBack无法返回上一层级
  • Android性能优化之应用瘦身(APK瘦身)
  • C语言数组和指针笔试题(二)(一定要看)
  • uniapp——实现在线选座功能——技能提升
  • 领域驱动设计:微服务的各种边界
  • MySQL之数据类型
  • 词法作用域改变词法作用域
  • 关于C++的隐藏 (hidden),重载(overload),重写(override)小结。
  • 算法通关村18关 | 透析回溯的模板
  • 【论文阅读】Untargeted Backdoor Attack Against Object Detection(针对目标检测的无目标后门攻击)
  • 分库分表---理论
  • [golang 流媒体在线直播系统] 2.搭建基于golang的流媒体服务器实现拉流推流,以及Html客户端拉取hls类型的流
  • 9月12日作业
  • React框架下如何集成H.265网页流媒体视频播放器EasyPlayer.js?
  • 《向量数据库》——向量数据库的使用场景有哪些?
  • Java 中 List 集合取补集
  • 我的个人网站——宏夏Coding上线啦
  • 【机器视觉】喇叭的外圆以及金属内圆的同心度视觉检测--康耐德智能
  • STM32WB55开发(2)----修改蓝牙地址