函数:参数
func test(x int, y ...byte) {
fmt.Printf("%T\n", y)
}
func main() {
test(100, 1, 2, 3)
}
参数内存由调用者分配,但被当作局部变量。 变参的本质只是个 slice 对象。
函数有很多细节可能和你想象不太一样。比如一个函数调用,定义一个test
函数,y
称之为变参,不管语法怎么写,大部分语言都支持变参,可以看成语法糖,编译器负责把参数打包成[]byte
传递过去,调用方式区别不算大。
从语法上来说,我们会把x
和y
当成局部变量,因为在同一个层次不能定义名称相同的变量。变量参数x
和普通局部变量都是局部变量,有什么区别呢?x
和y
的内存由调用者分配的,局部变量的内存是test
函数分配的,也就是说它们是在不同的栈帧上。
main
函数调用test
函数,调用test
传的参数是main
函数来提供的,也就是说在