1 回答

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超7個(gè)贊
c并且s實(shí)際上是兩個(gè)不同的字符串標(biāo)題。但他們都指向同一個(gè)"hello"。
sh := (*reflect.StringHeader)(unsafe.Pointer(&s))
ch := (*reflect.StringHeader)(unsafe.Pointer(&c))
fmt.Println(sh.Data, ch.Data)
https://go.dev/play/p/Ckl0P3g4nVo
字符串頭的Data字段指向字符串中的第一個(gè)byte,字符串頭的Len字段表示字符串的長(zhǎng)度。您可以使用該信息來確認(rèn)字符串標(biāo)頭是否指向原始字符串。
sh := (*reflect.StringHeader)(unsafe.Pointer(&s))
for i := 0; i < sh.Len; i++ {
sp := (*byte)(unsafe.Pointer(sh.Data + uintptr(i)))
fmt.Printf("%p = %c\n", sp, *sp)
}
https://go.dev/play/p/LFfdxxARw1f
- 1 回答
- 0 關(guān)注
- 116 瀏覽
添加回答
舉報(bào)