函数:函数的参数

函数参数在内存中由调用者分配,但在函数内部作为局部变量使用。参数和局部变量虽然在语法上相似,但内存分配和生命周期不同。局部变量只在当前函数作用域内有效,而参数的作用域扩展到调用者,影响return和defer。在Go语言中,由于goroutine调度和垃圾回收,局部变量的生命周期可能在函数执行期间发生变化,甚至可能提前回收。编译器可以通过特定指令标记变量状态以辅助垃圾回收。通过定义析构函数可以验证变量的回收行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

函数:参数

func test(x int, y ...byte) {
    fmt.Printf("%T\n", y)
}
func main() {
    test(100, 1, 2, 3)
}

参数内存由调用者分配,但被当作局部变量。 变参的本质只是个 slice 对象。

函数有很多细节可能和你想象不太一样。比如一个函数调用,定义一个test函数,y称之为变参,不管语法怎么写,大部分语言都支持变参,可以看成语法糖,编译器负责把参数打包成[]byte传递过去,调用方式区别不算大。

从语法上来说,我们会把xy当成局部变量,因为在同一个层次不能定义名称相同的变量。变量参数x和普通局部变量都是局部变量,有什么区别呢?xy的内存由调用者分配的,局部变量的内存是test函数分配的,也就是说它们是在不同的栈帧上。

main函数调用test函数,调用test传的参数是main函数来提供的,也就是说在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值