golang面试题一

stevenyeahnet · · 479 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

func change( s ...int)  {
    s = append(s,3)
}
slice := make([]int,5,5)
slice[0] = 1
slice[1] = 2
change(slice...)
fmt.Println(slice)
change(slice[0:2]...)
fmt.Println(slice)

第一次调用 change() 时,append() 操作使切片底层数组发生了扩容,原 slice 的底层数组不会改变;第二次调用change() 函数时,使用了操作符[i,j]获得一个新的切片,假定为 slice1,它的底层数组和原切片底层数组是重合的,不过 slice1 的长度、容量分别是 2、5,所以在 change() 函数中对 slice1 底层数组的修改会影响到原切片。

var a = [5]int{1,2,3,4,5}
var r [5]int
//range 表达式是副本参与循环,就是说例子中参与循环的是 a 的副本,而不是真正的 a
for i, v := range a {
   if i == 0 {
       a[1] = 12
       a[2] = 13
   }
   r[i] = v
}
//r =  [1 2 3 4 5]
//a =  [1 12 13 4 5]
fmt.Println("r = ", r)
fmt.Println("a = ", a)

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:stevenyeahnet

查看原文:golang面试题一

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

479 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传