我想知道为什么有 0 而不是 1?那是一个指针而不是一个值。谢谢大家。package mainimport "fmt"func main() { var i = new(int) defer func(i *int) { fmt.Printf("3:%p,%v\n", i, *i) }(i) defer fmt.Printf("2:%p,%v\n", i, *i) *i++ fmt.Printf("1:%p,%v\n", i, *i)}//1:0x1400001c0a0,1//2:0x1400001c0a0,0//3:0x1400001c0a0,1
2 回答

largeQ
TA贡献2039条经验 获得超8个赞
延迟调用的参数会立即求值,但直到周围函数返回时才会执行函数调用。
在第一个 defer 中,您使用调用 func 时收到的参数 i。在第二个 defer fmt.Printf("2:%p,%v\n", i, *i) 中,I 的值在 *i++ 之前就已经求值了
- 2 回答
- 0 关注
- 101 浏览
添加回答
举报
0/150
提交
取消