教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 连nil切片和空切片一不一样都不清楚?那BAT面试官只好让你回去等通知了

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

发布时间:2022-01-05   编辑:jiaochengji.com
教程集为您提供连nil切片和空切片一不一样都不清楚?那BAT面试官只好让你回去等通知了等资源,欢迎您收藏本站,我们将为您提供最新的连nil切片和空切片一不一样都不清楚?那BAT面试官只好让你回去等通知了资源

<span class="img-wrap"></span>

<h1>连nil切片和空切片一不一样都不清楚?那BAT面试官只好让你回去等通知了。</h1><h2>问题</h2><pre><code class="go">package main import ( "fmt" "reflect" "unsafe" ) func main() { var s1 []int // nil切片 s2 := 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) }</code></pre>

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

<h2>怎么答</h2><ul><li>nil切片和空切片指向的地址不一样。nil空切片引用数组指针地址为0(无指向任何实际地址)</li><li>空切片的引用数组指针地址是有的,且固定为一个值</li></ul><pre><code>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</code></pre><h2>解释</h2><ul><li>之前在前面的文章里提到过切片的数据结构为</li></ul><pre><code class="go">type SliceHeader struct { Data uintptr //引用数组指针地址 Len int // 切片的目前使用长度 Cap int // 切片的容量 }</code></pre><ul><li>nil切片和空切片最大的区别在于指向的数组引用地址是不一样的。</li></ul>

<span class="img-wrap"></span>

<ul><li>所有的空切片指向的数组引用地址都是一样的</li></ul>

<span class="img-wrap"></span>

<h2>文章推荐:</h2><ul><li>昨天那个在for循环里append元素的同事,今天还在么?</li><li>golang面试官:for select时,如果通道已经关闭会怎么样?如果只有一个case呢?</li><li>golang面试官:for select时,如果通道已经关闭会怎么样?如果只有一个case呢?</li><li>golang面试题:对已经关闭的的chan进行读写,会怎么样?为什么?</li><li>golang面试题:对未初始化的的chan进行读写,会怎么样?为什么?</li><li>golang 面试题:reflect(反射包)如何获取字段 tag?为什么 json 包不能导出私有变量的 tag?</li><li>golang面试题:json包变量不加tag会怎么样?</li><li>golang面试题:怎么避免内存逃逸?</li><li>golang面试题:简单聊聊内存逃逸?</li><li>golang面试题:字符串转成byte数组,会发生内存拷贝吗?</li><li>golang面试题:翻转含有中文、数字、英文字母的字符串</li><li>golang面试题:拷贝大切片一定比小切片代价大吗?</li><li>golang面试题:能说说uintptr和unsafe.Pointer的区别吗?</li></ul><h6>如果你想每天学习一个知识点?</h6>

<span class="img-wrap"></span>

到此这篇关于“连nil切片和空切片一不一样都不清楚?那BAT面试官只好让你回去等通知了”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
连nil切片和空切片一不一样都不清楚?那BAT面试官只好让你回去等通知了
php暗语指什么
切片 里面包含interface_Golang数据结构详解之切片
golang 面试题(十三)interface内部结构和nil详解
go 函数末尾缺少返回值_王垠:Go语言野心勃勃,实际情况又如何
photoshop十个简单好用的照片处理技巧分享
golang切片内存应用技巧
photoshop工业级电影调色让相机照片秒变银幕大片效果教程
Go语言切片详解
编程书说的“Go程序员应该让聚合类型的零值也具有意义”是在讲什么

上一篇:初识 Go 语言 下一篇:golang的channel机制
[关闭]
~ ~