gpt4 book ai didi

pointers - 使用指向值的指针作为 slice

转载 作者:IT王子 更新时间:2023-10-29 02:30:32 28 4
gpt4 key购买 nike

是否可以将指向特定值的指针转换为 slice ?

例如,我想从 io.Reader 中读取单个字节到 uint8 变量中。 io.Reader.Read 接受一个 slice 作为它的参数,所以我不能像在 C 中那样简单地向它提供一个指向我的变量的指针。

我认为从指针创建长度为 1、容量为 1 的 slice 是安全的操作。显然,它应该和从长度为1的数组中创建 slice 一样,是允许的操作。有没有一种简单的方法可以用普通变量来做到这一点?或者也许我不明白某些事情并且有理由禁止这样做?

最佳答案

slice不仅仅是一个指针,像C语言中的数组,它还包含了数据的长度和容量,像这样:

struct {
ptr *uint8
len int
cap int
}

所以,是的,您需要创建一个 slice 。创建 var a uint8 slice 的最简单方法是 []uint8{a}

a := uint8(42)
fmt.Printf("%#v\n", []uint8{a})

(但在重读你的问题后,这并不是一个解决方案)

但是如果你想从变量创建 slice ,指向相同的内存空间,你可以使用 unsafe 包。这是最有可能被劝阻的。

fmt.Printf("%#v\n", (*[1]uint8)(unsafe.Pointer(&a))[:] )

关于pointers - 使用指向值的指针作为 slice ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12130428/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com