我想知道為什么有 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 關注
- 90 瀏覽
添加回答
舉報
0/150
提交
取消