Go每日一题(41) 的题目如下

4326 次点击 · 6 赞 ·大约8小时之前 开始浏览   · 来源「Golang来啦」

下面这段代码输出什么?

func hello(num ...int) {  
    num[0] = 18
}

func main() {  
    i := []int{5, 6, 7}
    hello(i...)
    fmt.Println(i[0])
}
  • A.18
  • B.5
  • C.Compilation error
4326 阅读
46 回复
mingtop
mingtop · #1 · 3年之前

引用类型传参

summers
summers · #2 · 3年之前

m

Natsuwau
Natsuwau · #3 · 3年之前

打卡

Esac_Ben
Esac_Ben · #4 · 3年之前

Mark.

brothersam
brothersam · #5 · 3年之前

cao

jatshw
jatshw · #6 · 3年之前

m

Rob1n
Rob1n · #7 · 3年之前

A打卡,可变参数函数

henry1
henry1 · #8 · 3年之前

打卡

feiyang
feiyang · #9 · 3年之前

打卡

Zuos
Zuos · #10 · 3年之前

mark

AntonyZhang
AntonyZhang · #11 · 3年之前

mark

cc1234
cc1234 · #12 · 3年之前

18

32729842
32729842 · #13 · 3年之前

打卡

brothersam
brothersam · #14 · 2年之前

可变参数是切片,切片是引用,所以func内赋值会带出来。

feiyang
feiyang · #15 · 2年之前

可变参数函数。可变参数是切片,切片是引用

NovaChaos
NovaChaos · #16 · 2年之前

mk

_Aiden_
_Aiden_ · #17 · 2年之前

mark

wzbwzt
wzbwzt · #18 · 2年之前

1

Dessert
Dessert · #19 · 2年之前

可变参数是切片,切片是引用,所以func内赋值会带出

don178
don178 · #20 · 2年之前

不理解,hello(i...) 这块不是把切片解开了吗,为什么还会引用同一个底层数组?

YuPeng
YuPeng · #21 · 2年之前

打卡

YuPeng
YuPeng · #22 · 2年之前

20楼 @don178

func hello(num ...int) {
    fmt.Println(len(num), cap(num))
}

func main() {
    i := make([]int, 4, 8)
    hello(i...)
    fmt.Println(len(i), cap(i))
}

output

4 8
4 8
huangyf168
huangyf168 · #23 · 2年之前

打卡

hasbug
hasbug · #24 · 2年之前

mark

wzbwzt
wzbwzt · #25 · 2年之前

1

cherGou
cherGou · #26 · 2年之前

码。 可变参数是切片,切片是引用,所以func内赋值会带出来。

_Aiden_
_Aiden_ · #27 · 2年之前

mark

wong
wong · #28 · 2年之前
mingtopmingtop #1 回复

引用类型传参

牛的

YuPeng
YuPeng · #29 · 2年之前

打卡

hasbug
hasbug · #30 · 2年之前

mark

chenweihao
chenweihao · #31 · 2年之前

可变参数是切片,切片是引用,所以func内赋值会带出来。

huangyf168
huangyf168 · #32 · 2年之前

mark

brothersam
brothersam · #33 · 2年之前

18

euibieur894
euibieur894 · #34 · 2年之前

打卡

1174en
1174en · #35 · 2年之前

m

BigBigGopher
BigBigGopher · #36 · 大约1年之前

mk

zhangwei_go
zhangwei_go · #37 · 大约1年之前

可变参数是切片,切片是引用,所以func内赋值会带出来。

Qmfuser
Qmfuser · #38 · 大约1年之前

mark

1174en
1174en · #39 · 大约1年之前

m

a406299736
a406299736 · #40 · 大约1年之前

mmmmmmmmk

YuPeng
YuPeng · #41 · 大约1年之前

mark

feiyang
feiyang · #42 · 11月之前

可变参数是切片,切片是引用,所以func内赋值会带出来。

brothersam
brothersam · #43 · 11月之前

重点是底层数组的指针没变,所以是18.

BigBigGopher
BigBigGopher · #44 · 11月之前

可变参数是切片,切片是引用,所以func内赋值会带出来

hengbo
hengbo · #45 · 11月之前
don178don178 #20 回复

不理解,hello(i...) 这块不是把切片解开了吗,为什么还会引用同一个底层数组?

我也是这么想的为啥啊

YuPeng
YuPeng · #46 · 7月之前
BigBigGopherBigBigGopher #44 回复

可变参数是切片,切片是引用,所以func内赋值会带出来

切片不是引用 你可以尝试 append试试

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