指針引用內(nèi)存中的位置。據(jù)我所知,實(shí)際上所有內(nèi)存地址都具有相同的類型,而與變量類型無關(guān)。而不是使用不同的指針類型(*int等*string),這是否可能只對所有指針類型使用一種類型(var p pointer)?不同的指針類型有什么區(qū)別?package mainimport "fmt"func main() { i := 5 s := "abc" var pi *int // alternatively var pi pointer var ps *string // alternatively var ps pointer pi = &i ps = &s fmt.Printf("%p %p", pi, ps) // result is 0x1040e0f8 0x1040a120}
2 回答

慕的地8271018
TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊
Go 中的類型系統(tǒng)旨在防止與指針相關(guān)的內(nèi)存錯(cuò)誤。這允許程序員有足夠的控制權(quán)來操作內(nèi)存中的對象,同時(shí)允許垃圾收集器頂部警察喜怒無常的繁重工作。
如果您需要手動(dòng)存儲和轉(zhuǎn)換指針類型,您可以使用unsafe 包。

冉冉說
TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超1個(gè)贊
這可能對所有指針類型僅使用一種類型嗎?
是的,這幾乎就是 C 的工作方式。不幸的是,這使語言變得危險(xiǎn)。假設(shè)您有一個(gè) 10 字節(jié)的數(shù)組。如果您只是傳遞指針,其他代碼將不知道可以安全訪問多少字節(jié)。這會導(dǎo)致各種緩沖區(qū)溢出錯(cuò)誤。(即心臟出血)
在 Go 中,它們的指針知道它所指向的事物的類型,因此它可以防止您的代碼一直出現(xiàn)緩沖區(qū)溢出問題。
你可以做你想做的事,但只能使用 Unsafe 包。顧名思義,這是一件非常危險(xiǎn)的事情。
也許如果你發(fā)布你真正想做的事情,人們可以幫助你。使用不安全指針并不是編寫高性能代碼的唯一方法。
- 2 回答
- 0 關(guān)注
- 177 瀏覽
添加回答
舉報(bào)
0/150
提交
取消