本文摘自网络,作者Agzer0,侵删。
今天在学习unsafe.Pointer
用法的时候,无意中发现这么写slice自身的指针会变
data := []byte{0, 0}
fmt.Printf("%p\n", data) // 0xc0001202a0
p := (*[2]byte)(unsafe.Pointer(&data))
// p := (*[2]byte)(unsafe.Pointer(&data[0])) // 如果换成这种写法,则没问题
fmt.Printf("%p\n", data) // 0xc0001202a0
for i := range p {
p[i] = 1
// fmt.Printf("%p\n", data) 在这里每次循环,data的指针都会改变
}
fmt.Printf("%p\n", data) // 0xc000120101
有没有大佬知道这是什么原因吗
相关阅读 >>
Golang ip地址字符串整数string int相互转换
手撸Golang 基本数据结构与算法 图的最短路径 狄克斯特拉算法
更多相关阅读请进入《Go》频道 >>
Go语言101
一个与时俱进的Go编程知识库。