下面这段代码输出什么?
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
答: A 18 解析:… 变质是传切片,又因为未发生切片扩容,因此这2个切片指的底层数组是同一个。因此i[0]被改为18
这里对原题目做出小改动
package main
import "fmt"
func hello(num ...int) {
num = append(num, 1)
num[0] = 18
}
func main() {
i := []int{5, 6, 7}
hello(i...)
fmt.Println(i[0])
}
改动后 num的切片发送了扩容,导致2个切片指的底层数组不通,因此不会影响到 i切片 最终print 输出 5