```
package main
import (
"fmt"
"unsafe"
)
type stringssHeader struct {
Data unsafe.Pointer
Len int
Byt byte
}
func main() {
var bytes = []byte{0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 'h', 'c'}
var ptr = &bytes[0]
header := (*stringssHeader)(unsafe.Pointer(ptr))
header.Data = unsafe.Pointer(&bytes[17])
fmt.Println(*(*string)(unsafe.Pointer(ptr)))
}
```
header := (*stringssHeader)(unsafe.Pointer(ptr))
header.Data = unsafe.Pointer(&bytes[17])
这2行的意义是什么,求解惑
打印出ptr就是为了展示,当header结构体中的第一个属性的地址改变的时候,并不修改改变量原来的地址所引用的值的意思吧。如果不是这样,ptr打印出来就是'h'了。
#3
更多评论
你如果会C的话就很容易理解:
char buf[xxx] =....; //开个大空间
header = (stringHeader *)&buf[0] ; //把刚才的空间看成一个结构
结构体内的data指针是一样的原理, 只不过指向自己内部的一个空间 ,
不过这里的‘h' 'c'前面的1怎么回事
#2