题目:
package main
import "fmt"
func main() {
s := []int{5, 6, 7}
p := &s[0]
fmt.Printf("%p\n", p) // 输出: 0xc000014080
s = append(s, 8)
if &s[0] == p {
fmt.Println("yes")
} else {
fmt.Println("no")
}
}输出结果:no
当切片发生扩容时,会创建新的底层数组,因此 &s[0] 和 p 指向的地址会不同。
在 Go 中,append 函数可能会导致切片扩容,当切片容量不足以容纳新元素时,会分配一个新的、更大的底层数组,并将原数组的元素复制过去。此时,s[0] 的地址会发生变化,不再等于原来的 p。
loommii