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

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

指向切片和數組的指針

指向切片和數組的指針

Go
慕姐8265434 2021-12-27 17:47:01
我正在查看 Go 的堆包 ( https://golang.org/pkg/container/heap/ ) Priority Queue 示例并遇到了這個:type PriorityQueue []*Item...func (pq *PriorityQueue) Pop() interface{} {    old := *pq    n := len(old)    item := old[n-1]    item.index = -1 // for safety    *pq = old[0 : n-1]    return item} 當我開始玩弄這段代碼以確保我理解它時,我嘗試了:item := *pq[0] // error這使您鍵入 *[]T 不支持索引。但如果你這樣做:item := (*pq)[0] // all is well這是類型斷言吧?希望有人能解釋這里發生了什么。這是一些快速顯示的代碼:https : //play.golang.org/p/uAzYASrm_Q
查看完整描述

1 回答

?
牧羊人nacy

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

對您有用的不是類型斷言 - 它是操作順序。

問題的根源在于索引先于指針的取消引用。一旦將大括號放在指針解除引用周圍,一切都會很好,因為索引應用于現在解除引用的PriorityQueue實例。

您不需要對數組指針執行此操作,因為它們會自動取消引用 - 索引數組和切片之間的細微差別在這里解釋:Go 編程語言規范 - 索引表達式

對于a數組類型A

  • 常量索引必須在范圍內

  • 如果x在運行時超出范圍,則會發生運行時恐慌

  • a[x]在索引的數組元素x的類型和a[x]被的元素類型A

對于a指向數組類型的指針:

  • a[x] 是簡寫 (*a)[x]

對于a切片類型S

  • 如果x在運行時超出范圍,則會發生運行時恐慌

  • a[x]在索引片元件x的類型和a[x]被的元素類型S


查看完整回答
反對 回復 2021-12-27
  • 1 回答
  • 0 關注
  • 175 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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