亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用指向值的指針作為切片

使用指向值的指針作為切片

Go
江戶川亂折騰 2021-05-09 13:19:59
是否可以將某個值的指針轉換為分片?例如,我想從單字節讀取io.Reader到uint8變量。io.Reader.Read接受一個slice作為其參數,所以我不能像在C中那樣簡單地為其提供一個指向變量的指針。我認為從指針創建長度為1,容量為1的切片是安全的操作。顯然,它應該與從長度為1的數組創建切片相同,這是允許的操作。有沒有簡單的方法可以用普通變量做到這一點?或者,也許我聽不懂某事,并且有某些原因為什么要禁止這樣做?
查看完整描述

3 回答

?
郎朗坤

TA貢獻1921條經驗 獲得超9個贊

切片不僅是指針,就像C中的數組一樣。它還包含數據的長度和容量,如下所示:


struct {

  ptr *uint8

  len int

  cap int

}

因此,是的,您將需要創建一個切片。創建切片的最簡單方法var a uint8是[]uint8{a}


a := uint8(42)

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

(但是在重讀您的問題之后,這并不是全部的解決方案)


但是,如果您希望從變量創建切片,并指向相同的內存空間,則可以使用該unsafe包。不建議這樣做。


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


查看完整回答
反對 回復 2021-05-17
?
喵喵時光機

TA貢獻1846條經驗 獲得超7個贊

為什么不使用簡單的解決方案,而不是使這個瑣碎的任務復雜化呢?即傳遞。讀取一個length-1的slice,然后將其第零個元素分配給您的變量。


查看完整回答
反對 回復 2021-05-17
  • 3 回答
  • 0 關注
  • 179 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號